Совместимость регулярок в Postgresql
Сделал тут регулярное выражение:
WHEN\s*'([^']*)'\s*THEN\s*\n([\s\S]*?)(?=\s*WHEN|ELSE\s*--nichts gefunden)
Вроде в доках написано, что в PostgreSQL поддерживается (?=, но почему-то до него всё работает правильно тут, а с ним уже не работает вообще тут
что не так? и как поправить?
Ответы (1 шт):
Автор решения: Wiktor Stribiżew
→ Ссылка
SELECT regexp_matches(
(SELECT pg_get_functiondef(oid) FROM pg_catalog.pg_proc WHERE proname iLIKE 'Auditlog__references__get'),
E'WHEN\\s*?''([^'']*)''\\s*THEN\\s*\n(.*?)(?=\\s*WHEN|ELSE\\s*--nichts gefunden)',
'g')
Подробности
- Шаблон
[\s\S]не нужен, так как в PostgreSQL.находит любой символ, включая переход на новую строку - Ленивый квантификатор после жадного (первого) на одном и том же "уровне" становится жадным, поэтому первый квантифицированный шаблон,
\s*?, должен быть ленивым, чтобы все последующие тоже были ленивыми. - Флаг
mздесь не нужен (так как нет ни^, ни$), нужен только флагg(чтобы найти все совпадения).