正则表达式函数¶
所有正则表达式函数都使用 Java 模式 语法,但也有一些显著的例外。
使用多行模式时(通过
(?m)标志启用),只有\n被识别为行终止符。此外,不支持(?d)标志,不能使用。不区分大小写的匹配(通过
(?i)标志启用)始终以 Unicode 敏感的方式执行。但是,不支持上下文敏感和本地敏感匹配。此外,不支持(?u)标志,不能使用。不支持代理对。例如,
\uD800\uDC00不被视为U+10000,必须指定为\x{10000}。边界 (
\b) 在没有基字符的非间距标记中处理不正确。\Q和\E不支持字符类(如[A-Z123]),而是作为文字处理。Unicode 字符类 (
\p{prop}) 支持以下差异名称中的所有下划线必须删除。例如,使用
OldItalic而不是Old_Italic。脚本必须直接指定,无需
Is、script=或sc=前缀。示例:\p{Hiragana}块必须使用
In前缀指定。不支持block=和blk=前缀。示例:\p{Mongolian}类别必须直接指定,无需
Is、general_category=或gc=前缀。示例:\p{L}二进制属性必须直接指定,无需
Is。示例:\p{NoncharacterCodePoint}
- 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_extract(string, pattern) -> varchar()¶
返回正则表达式
pattern在string中匹配的第一个子字符串。SELECT regexp_extract('1a 2b 14m', '\d+'); -- 1
- regexp_extract(string, pattern, group) -> varchar()¶
查找正则表达式
pattern在string中的第一个出现情况,并返回 捕获组号group。SELECT regexp_extract('1a 2b 14m', '(\d+)([a-z]+)', 2); -- 'a'
- 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()¶
使用正则表达式
pattern匹配到的子字符串,在string中替换为replacement。 捕获组 可以使用$g(对于编号组)或${name}(对于命名组)在replacement中引用。美元符号 ($) 可以通过在前面加反斜杠 (\$) 来包含在替换中。SELECT regexp_replace('1a 2b 14m', '(\d+)([ab]) ', '3c$2 '); -- '3ca 3cb 14m'
- 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, ]