У меня есть следующий запрос:Что эквивалентно regexp Q ... E в postgresql?
SELECT
field
FROM
myTable
WHERE
field ~ '\\Qprefix[\\E.+'
Он не найдет значения, как prefix[foo]
.
Как заменить \Q..\E
?
У меня есть следующий запрос:Что эквивалентно regexp Q ... E в postgresql?
SELECT
field
FROM
myTable
WHERE
field ~ '\\Qprefix[\\E.+'
Он не найдет значения, как prefix[foo]
.
Как заменить \Q..\E
?
Эта форму регулярного выражения с \Q..\E
неупорядоченная подстрока поддерживается только PCRE, которая изначально недоступна в PostgreSQL.
Если ваша программа должна иметь дело с этим синтаксисом в целом, поддержка PCRE может быть установлен как расширение, как это предусмотрено здесь: https://github.com/petere/pgpcre
С другой стороны, если это только то, что один регулярное выражение, которое должно быть сделано, чтобы работа, первая Обратите внимание, что двойная обратная косая черта в '\\Qprefix[\\E.+'
означает буквально две обратные косые черты с PostgreSQL 9.1 и выше, если только standard_conforming_strings
явно не переключен на OFF
. Чтобы нечувствительность к этой настройке, ожидается, что литералы со старым синтаксисом будут иметь префикс E
. Это описано в документе String Constants with C-style Escapes в документе.
Чтобы просто соответствовать prefix[foo]
с PostgreSQL в стиле регулярных выражений с современным синтаксисом, это работает:
test=> show standard_conforming_strings ;
standard_conforming_strings
-----------------------------
on
(1 row)
test=> select 'prefix[foo]' ~ 'prefix\[.+';
?column?
----------
t
(1 row)
Что именно '\ Q' делать? –
@a_horse_with_no_name _ «Многие вкусы также поддерживают escape-последовательность' \ Q ... \ E'. Все символы между '\ Q' и' \ E' интерпретируются как буквенные символы. "_ Http: //www.regular -expressions.info/characters.html – Wiseguy
вы можете использовать «Metasyntax регулярного выражения». Обычно вкус используемого RE определяется regex_flavor. Однако это может быть переопределено префиксом директора. Если RE начинается с ***:, остальная часть RE берется как ARE независимо от regex_flavor. Если RE начинается с *** =, остальная часть RE принимается за литеральную строку, причем все символы считаются обычными символами. См. Http://www.postgresql.org/docs/8.3/static/functions-matching.html –