@pqgg7nwkd4

В чем ошибка использования regexp_replace в postgres 12?

Прежде чем приведу суть в виде примеров, прошу НЕ придерайтесь к смыслу, только к механике непосредственно функции.

Итак примеры.
Как-бы вырезаем теги (не придерайтесь к сути, пожалуйста):
SELECT regexp_replace('foo <a>123</a> bar <a>123</a> baz', '<a>.*?</a>', '', 'g');
-- foo  bar  baz

Всё ок, как и ожидалось.

Чуть усложняем:
SELECT regexp_replace('foo <a X>123</a> bar <a Y>123</a> baz', '<a [XY]>.*?</a>', '', 'g');
-- foo  bar  baz

Всё ок, как и ожидалось.

Меняем квадратные скобки на круглые:
SELECT regexp_replace('foo <a X>123</a> bar <a Y>123</a> baz', '<a (X|Y)>.*?</a>', '', 'g');
-- foo  baz

Почему bar съелся?

Версия посгреса: 12. Документация на функцию тут: https://postgrespro.ru/docs/postgrespro/12/functio...
  • Вопрос задан
  • 676 просмотров
Решения вопроса 1
@pqgg7nwkd4 Автор вопроса
Ответ нашел в IRC посгреса и документации.
Нужно писать так:

SELECT regexp_replace('foo <a X>123</a> bar <a Y>123</a> baz', '<a (X|Y){1,1}?>.*?</a>', '', 'g');
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы