REGEXP_EXTRACT_ALL函数用于在字符串source中查找所有与pattern匹配的子字符串,并以数组形式返回所有找到的字符串。
命令格式
ARRAY<T> REGEXP_EXTRACT_ALL(STRING <source>, STRING <pattern>[,BIGINT <group_id>])
参数说明
source:必填。STRING类型。被匹配的字符串。
pattern:必填。STRING类型常量或正则表达式。用于匹配的子字符串或正则表达式。更多正则表达式编写规范,请参见正则表达式规范。
group_id:可选。BIGINT类型。取值大于等于0。
如果不指定group_id, 默认为1,返回group_id为1的所有匹配结果组成的数组。
如果指定group_id,返回该group_id匹配的所有结果组成的数组。
如果group_id等于0,pattern将被当作一个整体进行匹配。
返回值说明
返回ARRAY<STRING>类型。返回规则如下:
若pattern为空串或pattern中没有分组且未指定group_id,返回报错。
说明执行
SET odps.sql.bigquery.compatible=true;
开启BigQuery兼容模式,如果pattern中没有分组且未指定group_id时,则返回满足整个pattern的子串组成的数组。若group_id非BIGINT类型或小于0时,返回报错。
source、pattern或group_id值为NULL时,返回NULL。
使用示例
示例一:不指定group_id时,默认返回第一个group_id匹配到的结果。
-- 返回 ["100","300"]。 SELECT REGEXP_EXTRACT_ALL('100-200, 300-400', '(\\d+)-(\\d+)');
示例二:指定group_id值为
2
,返回第二个group_id匹配到的结果。-- 返回["200","400"] 。 SELECT REGEXP_EXTRACT_ALL('100-200, 300-400', '(\\d+)-(\\d+)',2);
示例三:pattern中没有分组。命令示例如下:
场景一:pattern中没有分组且未指定group_id,则返回报错。在BigQuery兼容模式下,则返回满足整个pattern的子串组成的数组。
-- FAILED: ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: SQL Runtime Unretryable Error: ODPS-0121065:Argument value out of range - Regex group count is 0, but the specified group index is 1 SELECT REGEXP_EXTRACT_ALL('100-200, 300-200', '\\d+-\\d+'); -- 开启BigQuery兼容模式。 SET odps.sql.bigquery.compatible=true; -- 返回["100-200","300-200"]。 SELECT REGEXP_EXTRACT_ALL('100-200, 300-200', '\\d+-\\d+');
场景二:pattern中没有分组且指定group_id值为0,则返回满足整个pattern的子串组成的数组。
-- 返回["100-200","300-200"]。 SELECT REGEXP_EXTRACT_ALL('100-200, 300-200', '\\d+-\\d+',0);
相关函数
REGEXP_EXTRACT_ALL函数属于字符串函数,更多查找字符串、转换字符串格式的相关函数请参见字符串函数。