通过下面的示例,我只使用表达式SIMILAR TO获得TRUE; LIKE和〜都显示为FALSE(我猜错了?)
由于SIMILAR TO在许多SO帖子中都不合适,我想了解是否有一种方法可以使用LIKE或〜来进行正则表达式与替代方案的匹配.
SELECT 'thomas' SIMILAR TO '%(h|x)%'
-- result: t
SELECT 'thomas' LIKE '%(h|x)%'
-- result: f
SELECT 'thomas' ~* '%(h|x)%'
-- result: f
Run Code Online (Sandbox Code Playgroud)
LIKE支持使用_任何单个字符和%任何字符序列的模式匹配,因此:
SELECT 'thomas' LIKE '%(h|x)%'
Run Code Online (Sandbox Code Playgroud)
由于LIKE不了解(...)分组或|交替,因此这些只是LIKE模式中的文字字符.
SIMILAR TO支持_和%LIKE一样,但添加分组(...),替换|和其他一些事情,所以这样:
SELECT 'thomas' SIMILAR TO '%(h|x)%'
Run Code Online (Sandbox Code Playgroud)
按预期工作.
~*使用POSIX正则表达式,因此(...)用于分组并且|用于交替,但%只是一个百分号; 这意味着:
SELECT 'thomas' ~* '%(h|x)%'
Run Code Online (Sandbox Code Playgroud)
正在寻找一个h或被x百分号所包围的东西,并且不会按照你期望的方式工作.
~*如果您使用正确的正则表达式,您的版本将起作用:
SELECT 'thomas' ~* '(h|x)' -- alternation
SELECT 'thomas' ~* 'h|x' -- alternation without an unnecessary grouping
SELECT 'thomas' ~* '[hx]' -- or a character class
Run Code Online (Sandbox Code Playgroud)
与上述相关的文档涵盖了所有这些内容.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |