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 
Interesting Posts