Вопрос

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    
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top