PostgreSQL Regex слово границы?
-
26-09-2019 - |
Вопрос
PostgreSQL поддерживает \b
?
я пытаюсь \bAB\b
Но это ничего не совпадает, тогда как (\W|^)AB(\W|$)
делает. Эти 2 выражения по существу одинаковы, не так ли?
Решение
PostgreSQL использует \m
, \M
, \y
и \Y
Как границы слов:
\m matches only at the beginning of a word
\M matches only at the end of a word
\y matches only at the beginning or end of a word
\Y matches only at a point that is not the beginning or end of a word
Видеть Ограничение регулярного выражения высказывает в руководстве.
Есть также [[:<:]]
и [[:>:]]
, который соответствует началу и концу слова. От руководство:
Существует два особых случаях выражений кронштейна: выражения кронштейна
[[:<:]]
и[[:>:]]
являются ограничениями, соответствующие пустыми строками в начале и конце слова соответственно. Слово определяется как последовательность символов слова, которые не предшествуют и не следует символы слова. Символ слова - символ ALNUM (как определено CTYPE) или подчеркиванием. Это расширение, совместимое с но не указано POSIX 1003.2 и должно использоваться с осторожностью в программном обеспечении, предназначенном для портативного в других системах. ОСОБЕННОСТИ УСТАНОВКИ ОСОБЕННОСТИ ОСОБЕННОСТИ, ОСОБЕННО ПРЕДОСТАВЛЯЕМЫЕ (они не являются более стандартными, но, безусловно, легче ввести).
Другие советы
Простой пример
select * from table_name where column ~* '\yAB\y';
Это будет совпадать AB
ab
ab - text
text ab
text AB
text-ab-text
text AB text
...
Но вы должны использовать:
select * from sometable where name ~* '\\yAB\\y';
если у вас есть standard_conforming_strings
Флаг установлен OFF
. Отказ Обратите внимание Двойные скольжения.
Вы можете установить его вручную:
set standard_conforming_strings=on;
Затем :select * from table_name where column ~* '\yAB\y';
должно сработать.
Точный поиск слова в тексте:
Я сталкивался с последующей проблемой.
Я хотел искать все контакты, которые имеют «CTO» как точное слово в заголовках, но в результатах были получены результаты с названием «Директор», я использовал следующий запрос
select * from contacts where title ilike '%cto%';
Я также пробовал с Whizspaces вокруг подстановочного знака как «% CTO%», он соответствовал тексту, который содержит «CTO», получил результаты, такие как «VP, CTO и Manger», но не приводит к тому, что «CTO».
Я хотел как «VP, CTO и Manger» и «CTO» в результатах, но не «директор» в результатах
После меня работал
select * from contacts where title ~* '\\ycto\\y';
~ Matches regular expression, case sensitive
~* Matches regular expression, case insensitive