正则表达式函数

所有正则表达式函数都使用Java模式语法,但有一些值得注意的例外:

  • 当使用多行模式(通过(?m)标志启用)时,仅将\n识别为行终止符。此外,不支持(?d)标志,不得使用该标志。
  • 不区分大小写的匹配(通过(?i)标志启用)始终以支持Unicode的方式执行。不过,不支持上下文相关和局部相关的匹配。此外,不支持(?u)标志,不得使用该标志。
  • 不支持代理项对。例如,\uD800\uDC00不被视为U+10000,必须将其指定为\x{10000}。对于没有基字符的不占位标记,会错误地处理边界(\b)。
  • 在字符类(如[A-Z123])中不支持\Q\E,而应将其视为字面量。
  • 支持Unicode字符类(\p{prop}),但有如下差异:
    • 必须删除名称中的所有下划线。例如,使用OldItalic代替Old_Italic
    • 必须直接指定脚本,而不使用Isscript=sc=前缀。示例:\p{Hiragana}
    • 必须使用In前缀指定块。不支持block=blk=前缀。示例:\p{Mongolian}
    • 必须直接指定类别,而不使用Isgeneral_category=gc=前缀。示例:\p{L}
    • 必须直接指定二进制属性,而不使用Is。示例:\p{NoncharacterCodePoint}

regexp_extract_all(string, pattern) -> array(varchar)

返回正则表达式patternstring中匹配的子字符串:

SELECT regexp_extract_all('1a 2b 14m', '\d+'); -- [1, 2, 14]

regexp_extract_all(string, pattern, group) -> array(varchar)

查找string中出现的所有正则表达式pattern实例并返回捕获组编号group

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

regexp_extract(string, pattern) -> varchar

返回正则表达式patternstring中匹配的第一个子字符串:

SELECT regexp_extract('1a 2b 14m', '\d+'); -- 1

regexp_extract(string, pattern, group) -> varchar

查找string中出现的第一个正则表达式pattern实例并返回捕获组编号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

string中由正则表达式pattern匹配的子字符串的每个实例替换为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 expression <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, ]

有奖捉虫

“有虫”文档片段

0/500

存在的问题

文档存在风险与错误

● 拼写,格式,无效链接等错误;

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 版本号不匹配:文档版本或内容描述和实际软件不一致;

● 对重要数据或系统存在风险的操作,缺少安全提示;

● 排版不美观,影响阅读;

内容描述不清晰

● 描述存在歧义;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

内容获取有困难

● 很难通过搜索引擎,openLooKeng官网,相关博客找到所需内容;

示例代码错误

● 命令、命令参数等错误;

● 命令无法执行或无法完成对应功能;

内容有缺失

● 关键步骤错误或缺失,无法指导用户完成任务,比如安装、配置、部署等;

● 逻辑不清晰,该分类、分项、分步骤的没有给出

● 图形、表格、文字等晦涩难懂

● 缺少必要的前提条件、注意事项等;

● 描述存在歧义

0/500

您对文档的总体满意度

非常不满意
非常满意

请问是什么原因让您参与到这个问题中

您的邮箱

创Issue赢奖品
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
有奖捉虫