PostgreSQL的正则expression式边界?
PostgreSQL支持\b
吗?
我正在尝试\bAB\b
但它不匹配任何内容,而(\W|^)AB(\W|$)
却没有。 这两个expression本质上是一样的,不是吗?
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
请参阅手册中的正则expression式约束转义 。
还有[[:<:]]
和[[:>:]]
,它们匹配单词的开头和结尾。 从手册 :
括号expression式有两种特殊情况:括号expression式
[[:<:]]
和[[:>:]]
是约束条件,分别匹配单词开头和结尾的空string。 一个单词被定义为一个单词字符序列,既不在单词字符之前,也不在其后面。 单词字符是一个alnum字符(由ctype定义)或下划线。 这是一个扩展,与POSIX 1003.2兼容,但不能在POSIX 1003.2中规定,在使用其他系统的软件时应谨慎使用。 下面描述的约束转义通常是可取的(它们不再是标准的,但当然更容易打印)。
一个简单的例子
select * from table_name where column ~* '\yAB\y';
这将工作在9.1和matche AB
ab
ab - text
text ab
text AB
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';
应该pipe用。
文本中的精确单词search:
我正面临以下问题。
我想search所有具有“cto”作为标题中的确切单词的联系人,但结果是获得结果标题中有“导演”,我正在使用以下查询
select * from contacts where title ilike '%cto%';
我也尝试过使用通配符作为'%cto%'的空白处,它与包含'cto'的文本进行匹配,得到的结果像'vp,cto和manger',但是没有与'cto'相同的结果。
在结果中,我想要“vp,cto和manger”和“cto”,而不是结果中的“director”
以下为我工作
select * from contacts where title ~* '\\ycto\\y'; ~ Matches regular expression, case sensitive ~* Matches regular expression, case insensitive