Skip to main content
Version: 1.1.1

Regular Expression Functions

正则表达式函数使用 RE2 作为正则表达式引擎。RE2 速度很快,但仅支持 PCRE 语法的子集,尤其不支持 回溯及其相关功能(例如反向引用)。更多信息请参阅 https://github.com/google/re2/wiki/Syntax。

编译正则表达式会占用大量 CPU 资源。因此,每个函数每个实例和每个执行线程最多只能处理 20 个不同的表达式。

    like(string, pattern) -> boolean
like(string, pattern, escape) -> boolean

评估“string”是否与“pattern”匹配。模式可以包含
正则字符和通配符。可以使用“escape”参数指定的单个字符对通配符进行转义。“escape”参数仅支持 ASCII 字符。匹配区分大小写。

注意:通配符“%”表示 0 个、1 个或多个字符,而通配符“_”表示一个字符。

注意:每个函数实例允许每个执行线程最多编译 20 个正则表达式。并非所有模式都需要编译正则表达式。模式 'hello''hello%''_hello__%'
'%hello''%__hello_''%hello%',其中 'hello''pollux' 仅包含正则字符和 '_' 通配符,无需使用正则表达式进行求值;
常量模式 '%hello%pollux%',其中 'hello''pollux' 仅包含正则字符(不包含 '_''#' 通配符),则使用子字符串搜索进行求值。
只有那些需要编译正则表达式的模式才会被计入限制。

SELECT like('abc', '%b%'); -- true
SELECT like('a_c', '%#_%', '#'); -- true
    regexp_extract(string, pattern) -> varchar

返回正则表达式“pattern”在“string”中匹配的第一个子字符串

SELECT regexp_extract('1a 2b 14m', '\d+'); -- 1
    regexp_extract(string, pattern, group) -> varchar

Finds the first occurrence of the regular expression ``pattern`` in
``string`` and returns the capturing group number ``group``

SELECT regexp_extract('1a 2b 14m', '(\d+)([a-z]+)', 2); -- 'a'
    regexp_extract_all(string, pattern) -> array(varchar):

返回正则表达式“pattern”在“string”中匹配的子字符串

SELECT regexp_extract_all('1a 2b 14m', '\d+'); -- [1, 2, 14]
    regexp_extract_all(string, pattern, group) -> array(varchar):

查找正则表达式 ``pattern`` 在 ``string`` 中出现的所有位置,并返回捕获组编号 ``group``

SELECT regexp_extract_all('1a 2b 14m', '(\d+)([a-z]+)', 2); -- ['a', 'b', 'm']
    regexp_like(string, pattern) -> boolean

评估正则表达式“pattern”并确定它是否包含在“string”中。

此函数类似于“LIKE”运算符,不同之处在于,
模式只需包含在“string”中,而不需要匹配整个“string”。换句话说,它执行的是
*包含*操作,而不是*匹配*操作。您可以使用“^”和“$”来锚定模式,从而匹配整个字符串

SELECT regexp_like('1a 2b 14m', '\d+b'); -- true
    regexp_replace(string, pattern) -> varchar

从“string”中删除所有与正则表达式“pattern”匹配的子字符串实例:

SELECT regexp_replace('1a 2b 14m', '\d+[ab] '); -- '14m'
    regexp_replace(string, pattern, replacement) -> varchar
:noindex:

将“string”中与正则表达式“pattern”匹配的所有子字符串替换为“replacement”。捕获组可以在“replacement”中引
用,使用“$g”表示编号组,使用“${name}”表示命名组。美元符号(“$”)可以通过使用反斜杠(“\$”)进行转义来包含
在替换中。如果反斜杠(“\”)后跟除数字或其他反斜杠(“\”)以外的任何字符,则前面的反斜杠(“\”)将被忽略:

SELECT regexp_replace('1a 2b 14m', '(\d+)([ab]) ', '3c$2 '); -- '3ca 3cb 14m'
SELECT regexp_replace('[{}]', '\}\]', '\}'); -- '[{}'
    regexp_replace(string, pattern, function) -> varchar

使用“function”替换“string”中与正则表达式“pattern”匹配的每个子字符串实例。lambda 表
达式“function”会针对每个匹配项调用,并将捕获组作为数组传递。捕获组编号从 1 开始;没有针对整个匹
配项的组(如果需要,请用括号将整个表达式括起来)。

SELECT regexp_replace('new york', '(\w)(\w*)', x -> upper(x[1]) || lower(x[2])); --'New York'
    regexp_split(string, pattern) -> array(varchar):

使用正则表达式“pattern”拆分“string”并返回一个数组。尾随的空字符串将被保留:

SELECT regexp_split('1a 2b 14m', '\s*[a-z]+\s*'); -- [1, 2, 14, ]