跳到主要内容
最后于 更新

REGEXP_EXTRACT_ALL_ARRAY

SinceVersion dev

描述​

提取 <pattern> 的第一个捕获组在 <str> 中的全部非重叠匹配,并按匹配顺序返回真正的字符串数组。任一参数为 NULL 时返回 NULL。

语法​

REGEXP_EXTRACT_ALL_ARRAY(<str>, <pattern>)

参数​

参数描述
<str>用于匹配的字符串,类型为 STRING。
<pattern>正则表达式字符串,类型为 STRING。提取第一个捕获组;不支持第三个捕获组索引参数。

返回值​

返回 ARRAY<STRING>。无匹配或表达式没有捕获组时返回空数组 [];任一参数为 NULL 时返回 NULL。非法正则表达式会报错。

默认使用 RE2 语法,匹配区分大小写。通过会话变量 enable_extended_regex 可启用高级正则特性,详见 REGEXP_EXTRACT_ALL。该函数返回数组;REGEXP_EXTRACT_ALL 返回格式化字符串。

示例​

SELECT regexp_extract_all_array('id=12,id=34', 'id=([0-9]+)') AS result;
["12", "34"]

使用 (?i) 忽略大小写:

SELECT regexp_extract_all_array('Hello hello HELLO', '(?i)(hello)') AS result;
["Hello", "hello", "HELLO"]
SELECT regexp_extract_all_array('abc', '([0-9]+)') AS no_match,
regexp_extract_all_array('abc', 'abc') AS no_capture_group;
[]    []
SELECT regexp_extract_all_array(NULL, '(a)') AS null_input,
regexp_extract_all_array('a', NULL) AS null_pattern;
NULL    NULL

返回值可直接交给数组函数:

SELECT array_size(regexp_extract_all_array('a1b2', '([0-9])')) AS matches;
2