PostgreSQL 支持\b
吗?
我正在尝试\bAB\b
,但它不匹配任何东西,而(\W|^)AB(\W|$)
确实如此。这两个表达式本质上是一样的,不是吗?
PostgreSQL 支持\b
吗?
我正在尝试\bAB\b
,但它不匹配任何东西,而(\W|^)AB(\W|$)
确实如此。这两个表达式本质上是一样的,不是吗?
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
请参阅手册中的正则表达式约束转义。
还有[[:<:]]
and [[:>:]]
,它匹配单词的开头和结尾。从手册:
括号表达式有两种特殊情况:括号表达式
[[:<:]]
和[[:>:]]
是约束,分别匹配单词开头和结尾的空字符串。一个单词被定义为一个单词字符序列,它既不在单词字符的前面也不在其后面。单词字符是 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”作为确切单词的联系人,但在结果中得到标题中包含“director”的结果,我正在使用以下查询
select * from contacts where title ilike '%cto%';
我还尝试使用通配符周围的空白作为“% cto %”,它与包含“cto”的文本匹配,得到类似“vp、cto 和 manger”的结果,但没有准确标题为“cto”的结果。
我想要结果中的“副总裁、首席技术官和经理”和“首席技术官”,而不是结果中的“导演”
以下为我工作
select * from contacts where title ~* '\\ycto\\y';
~ Matches regular expression, case sensitive
~* Matches regular expression, case insensitive