原文:How to Use Regex in PostgreSQL - LIKE and ~ Tilde[1]
作者:Data Pilot
翻译整理:Alitrack
插个小广告:
PG中文社区举办的第十届PostgreSQL中国技术大会即将开幕,为回馈粉丝,特建立PG大会粉丝群,群内会不定期发放大会门票优惠券、折扣券,也会分享精彩议程、重磅嘉宾、大会精美礼品、大会花絮等精彩内容。扫码带您入群,每天惊喜多多!
介绍
正则表达式是一组按特定顺序排列的字符,可帮助识别所需的正确输入。我们将研究正则表达式,以及如何使用除~,~*,!~,!~*之外的与常规匹配的代字运算符系列以外的其他方法或运算符(如 LIKE,NOT LIKE 和 SIMILAR TO)使用它们。区分大小写和不区分大小写的情况下的表达式。LIKE 和 SIMILAR TO 运算符执行的功能大致相同。现在让我们讨论这些运算符,并看看如何将它们用作正则表达式的一部分。
正则表达式中的 LIKE 运算符
如果输入字符串与模式匹配,则 LIKE 运算符将返回 true 结果。NOT LIKE 仅在 LIKE 运算符返回 false 时才返回 true,并且仅在 LIKE 运算符返回 true 时才返回 false。
LIKE 和 NOT LIKE 的工作语法如下:
'String' LIKE 'pattern'
'String' NOT LIKE 'pattern'复制
现在让我们做一些实际的例子:
'NewYork' LIKE 'NewYork' (TRUE)
'NewYork' LIKE 'New%' (TRUE)
'NewYork' LIKE '_Yo_' (TRUE)
'NewYork' LIKE 'York' (FALSE)复制
在上面的示例中,您可以看到没有百分比和下划线符号的文字模式,这意味着字符串本身将被视为模式,并且它的工作方式与等号相同,并且按字母顺序匹配输入内容。上例中的下划线(_)基本上只查找单个字符匹配,百分比(%)则查找无,单个或多个字符匹配。LIKE 运算符最适合完整字符串,如果子字符串或字符串中的一小部分需要匹配,则在这种情况下,模式必须在子字符串开头和子字符串结尾处都包含(%)。
波浪号正则表达式(~)
与 LIKE 和 SIMILAR TO 运算符相比,Tilde 正则表达式更强大。Tilde(~)运算符可帮助正则表达式轻松匹配字符串的任何部分。以下是可以在此类别中使用的运算符:
(~)用大小写敏感的方法匹配正则表达式 (~*)它也匹配正则表达式,但是不区分大小写 (!~)不区分大小写的正则表达式 (!~*)不区分大小写的方法不匹配正则表达式
与上述波浪号运算符相关的一些示例如下:
'London' ~ '.*London.*'
'London' ~* '.*London.*'
'London' !~ '.*London.*'
'London' !~* '.*London.*'复制
Tilde 是 POSIX 正则表达式的一部分,并且其中还包含不同的功能。有一个子字符串函数可以帮助我们识别和拾取与 POSIX 正则表达式匹配的子字符串。返回值将是子字符串或与正则表达式匹配的文本,如果不匹配,则返回空值。在正则表达式和子字符串函数中也必须非常小心地使用括号。在下面给出的示例中,我们已经显示了括号的正确用法,如果您使用任何其他方式将括号放入正则表达式中,则会导致异常,例如与初始子表达式匹配的子字符串部分,该子字符串包含在括号,将被返回。子字符串函数示例:
SUBSTRING('newyork' FROM 'w.o') (wyo)
SUBSTRING('newyork' FROM 'n.k') (newyork)
SUBSTRING('newyork' FROM 'w(.)o') (w)复制
结论
还有其他多个 POSIX 函数,例如 regexp_matches(),regexp_split_to_table(),regexp_split_to_array()等。它们可以帮助您充分利用 PostgreSQL 中的正则表达式。如果我们尝试更详细地介绍正则表达式,那么我们将拥有 Atom,量词,约束,括号表达式,转义,反向引用以及预定义的正则表达式元语法和特定的正则表达式匹配规则。
当然,正则表达式有几种不同的类型和细节,它们不能包含在单个内容中,但是我们将尝试在不久的将来通过将来的内容覆盖所有这些内容。敬请关注!
参考资料
How to Use Regex in PostgreSQL - LIKE and ~ Tilde: https://kb.objectrocket.com/postgresql/how-to-use-regex-in-postgresql-572
喜欢我的文章,烦请【关注】、【在看】、【转发】 ,🙏🙏!