类别:

字符串函数(正则表达式)

REGEXP_SUBSTR_ALL

返回一个 ARRAY,其中包含字符串中与正则表达式匹配的所有子字符串。如果未找到匹配项,则函数返回空 ARRAY。

别名:

REGEXP_EXTRACT_ALL

另请参阅:字符串函数(正则表达式)

语法

REGEXP_SUBSTR_ALL( <subject> , <pattern> [ , <position> [ , <occurrence> [ , <regex_parameters> [ , <group_num> ] ] ] ] )
Copy

实参

必填:

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"  |
| ]       |
+---------+
Copy

以下示例从字符串 (2) 中的第二个字符开始查找匹配项:

select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 2) as matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a2", |
|   "a3", |
|   "a4", |
|   "a6"  |
| ]       |
+---------+
Copy

以下示例从字符串 (3) 中模式的第三次匹配开始返回匹配项:

select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 1, 3) as matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a3", |
|   "a4", |
|   "a6"  |
| ]       |
+---------+
Copy

以下示例执行不区分大小写的匹配 (i):

select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 1, 1, 'i') as matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a1", |
|   "a2", |
|   "a3", |
|   "a4", |
|   "A5", |
|   "a6"  |
| ]       |
+---------+
Copy

以下示例执行不区分大小写的匹配,并返回与第一组 (ie) 匹配的字符串部分:

select regexp_substr_all('a1_a2a3_a4A5a6', '(a)([[:digit:]])', 1, 1, 'ie') as matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a",  |
|   "a",  |
|   "a",  |
|   "a",  |
|   "A",  |
|   "a"   |
| ]       |
+---------+
Copy

以下示例演示了在未找到匹配项时该函数返回空 ARRAY:

select regexp_substr_all('a1_a2a3_a4A5a6', 'b') as matches;
+---------+
| MATCHES |
|---------|
| []      |
+---------+
Copy
语言: 中文