PostgreSQL Regex词的界限?
-
26-09-2019 - |
题
不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)或一个下划线。这是一个扩展,兼容,但不是指定由POSIX1003.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';
应工作。
确切的词搜索的中文本:
我正面临着以下问题。
我想要搜索所有接触其具有'技术'为确切的词在标题,但是在结果是取得结果的标题具有'主任',我是使用以下查询
select * from contacts where title ilike '%cto%';
我还试图与whitspaces周围的通配符作为'%的首席技术官%',这是获取与案文其中包含的'技术',得到的结果,如'副总裁、首席技术官和管理',但没有结果有确切的标题为'技术'.
我想既'副总裁、首席技术官和管理'和'技术'在结果,但不是'主任'的结果
以下为我工作
select * from contacts where title ~* '\\ycto\\y';
~ Matches regular expression, case sensitive
~* Matches regular expression, case insensitive