- 类别:
REGEXP_SUBSTR_ALL¶
返回一个 ARRAY,其中包含字符串中与正则表达式匹配的所有子字符串。如果未找到匹配项,则函数返回空 ARRAY。
- 别名:
REGEXP_EXTRACT_ALL
另请参阅:字符串函数(正则表达式)
语法¶
REGEXP_SUBSTR_ALL( <subject> , <pattern> [ , <position> [ , <occurrence> [ , <regex_parameters> [ , <group_num> ] ] ] ] )
实参¶
必填:
subject
用于搜索匹配项的字符串。
pattern
要匹配的模式。
有关指定模式的准则,请参阅 字符串函数(正则表达式)。
可选:
position
函数开始搜索匹配项时,字符串开头的字符数。
默认值:``1``(搜索匹配项时,从左边的第一个字符开始)
occurrence
指定要从中开始返回匹配项的模式的第一次出现。该函数会跳过第一个
occurrence - 1
匹配项。例如,如果存在
5
个匹配项,并且您为occurrence
实参指定3
个匹配项,则该函数将忽略前两个匹配项,并返回第三个、第四个和第五个匹配项。默认:
1
regex_parameters
包含一个或多个字符的字符串,指定用于搜索匹配项的正则表达式参数。支持的值为:
c
:区分大小写。i
:不区分大小写。m
:多行模式。e
:提取子匹配项。s
:“.”通配符也与换行符匹配。
有关详细信息,请参阅 正则表达式参数 文档。
默认:
c
备注
默认情况下,REGEXP_SUBSTR_ALL 返回主题的整个匹配部分。但是,如果指定了
e`(用于“提取”)参数,则 REGEXP_SUBSTR_ALL 返回字符串中与模式中第一组匹配的部分。如果指定了 :code:`e
,但未同时指定group_num
,则group_num
的值将默认为 1(第一组)。如果模式中没有子表达式,则 REGEXP_SUBSTR_ALL 表现得如同未设置e
。有关使用e
的示例,请参阅本主题中的 示例。group_num
group_num
参数指定要提取的组。通过在正则表达式中使用括号来指定组。如果指定了
group_num
,则 Snowflake 允许在未同时指定'e'
选项的情况下执行提取。隐含了'e'
。Snowflake 至多支持 1024 个组。
有关使用
group_num
的示例,请参阅本主题中的 示例。
返回¶
该函数返回 ARRAY 类型的值。ARRAY 包含每个匹配子字符串的元素。
如果指定 group_num
,并且模式未指定具有该数字的分组,则函数将返回 NULL。例如,如果模式只指定一个组(例如 a(b)c
),并且您使用 2
作为 group_num
,则函数返回 NULL。
使用说明¶
有关使用正则表达式的其他信息,请参阅 字符串函数(正则表达式)。
排序规则详细信息¶
Arguments with collation specifications are currently not supported.
示例¶
以下示例中的模式匹配小写字母“a”,后跟数字。该示例返回包含所有匹配项的 ARRAY :
select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]') as matches; +---------+ | MATCHES | |---------| | [ | | "a1", | | "a2", | | "a3", | | "a4", | | "a6" | | ] | +---------+
以下示例从字符串 (2
) 中的第二个字符开始查找匹配项:
select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 2) as matches; +---------+ | MATCHES | |---------| | [ | | "a2", | | "a3", | | "a4", | | "a6" | | ] | +---------+
以下示例从字符串 (3
) 中模式的第三次匹配开始返回匹配项:
select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 1, 3) as matches; +---------+ | MATCHES | |---------| | [ | | "a3", | | "a4", | | "a6" | | ] | +---------+
以下示例执行不区分大小写的匹配 (i
):
select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 1, 1, 'i') as matches; +---------+ | MATCHES | |---------| | [ | | "a1", | | "a2", | | "a3", | | "a4", | | "A5", | | "a6" | | ] | +---------+
以下示例执行不区分大小写的匹配,并返回与第一组 (ie
) 匹配的字符串部分:
select regexp_substr_all('a1_a2a3_a4A5a6', '(a)([[:digit:]])', 1, 1, 'ie') as matches; +---------+ | MATCHES | |---------| | [ | | "a", | | "a", | | "a", | | "a", | | "A", | | "a" | | ] | +---------+
以下示例演示了在未找到匹配项时该函数返回空 ARRAY:
select regexp_substr_all('a1_a2a3_a4A5a6', 'b') as matches; +---------+ | MATCHES | |---------| | [] | +---------+