Подтвердить что ты не робот

Пограничные слова PostgreSQL Word?

Поддерживает ли PostgreSQL \b?

Я пытаюсь \bAB\b, но он ничего не соответствует, тогда как (\W|^)AB(\W|$) делает. Эти два выражения по существу одинаковы, не так ли?

4b9b3361

Ответ 1

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, и его следует использовать с осторожностью в программном обеспечении, предназначенном для переносимости в другие системы. Обычно предпочтительные ограничения, описанные ниже, являются предпочтительными (они не являются более стандартными, но, безусловно, легче печатать).

Ответ 2

Простой пример

select * from table_name where column ~* '\yAB\y';

Это будет работать в 9.1 и matche AB AB ab - text text ab text ab text-ab-text text AB text...

Но вы должны быть осторожны в 9.2. вы должны использовать:

select * from sometable where name ~* '\\yAB\\y';

Обратите внимание на двойные косые черты.
В 9.2 для параметра standard_conforming_strings установлено значение OFF по умолчанию. Но вы можете установить его вручную:

set standard_conforming_strings=on;

Затем: select * from table_name where column ~* '\yAB\y'; должен работать.

Ответ 3

Точный поиск слова в тексте:

У меня возникла следующая проблема.

Я хотел искать все контакты, которые имеют "cto" как точное слово в заголовках, но в результатах получались результаты с названием "Director" в нем, я использовал следующий запрос

select * from contacts where title ilike '%cto%';

Я также пробовал с whitspaces вокруг wildcard как "% 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