REGEXP_EXTRACT_OR_NULL
更新时间:2025-10-17
描述
提取文本串中最先出现的与目标正则模式匹配的子串,并根据表达式组下标提取其中的特定组。
- 字符集匹配需要使用 Unicode 标准字符类型。例如,匹配中文请使用
\p{Han}。
:::info 自 PALO 2.1.6 起支持 :::
语法
SQL
1REGEXP_EXTRACT_OR_NULL(<str>, <pattern>, <pos>)
参数
| 参数 | 描述 |
|---|---|
<str> |
字符串,需要进行正则匹配的文本串。 |
<pattern> |
字符串,目标模式。 |
<pos> |
整数,要提取的表达式组下标,从 1 开始计数。 |
返回值
返回字符串类型,结果为匹配 <pattern> 的部分。
- 如果输入的
<pos>为 0,返回整个第一次匹配的子文本串。 - 如果输入的
<pos>不合法(为负数或超出表达式组数量),返回 NULL。 - 如果正则匹配失败,返回 NULL。
举例
SQL
1SELECT REGEXP_EXTRACT_OR_NULL('123AbCdExCx', '([[:lower:]]+)C([[:lower:]]+)', 1);
Text
1+---------------------------------------------------------------------------+
2| REGEXP_EXTRACT_OR_NULL('123AbCdExCx', '([[:lower:]]+)C([[:lower:]]+)', 1) |
3+---------------------------------------------------------------------------+
4| b |
5+---------------------------------------------------------------------------+
SQL
1SELECT REGEXP_EXTRACT_OR_NULL('123AbCdExCx', '([[:lower:]]+)C([[:lower:]]+)', 0);
Text
1+---------------------------------------------------------------------------+
2| REGEXP_EXTRACT_OR_NULL('123AbCdExCx', '([[:lower:]]+)C([[:lower:]]+)', 0) |
3+---------------------------------------------------------------------------+
4| bCd |
5+---------------------------------------------------------------------------+
SQL
1SELECT REGEXP_EXTRACT_OR_NULL('123AbCdExCx', '([[:lower:]]+)C([[:lower:]]+)', 5);
Text
1+---------------------------------------------------------------------------+
2| REGEXP_EXTRACT_OR_NULL('123AbCdExCx', '([[:lower:]]+)C([[:lower:]]+)', 5) |
3+---------------------------------------------------------------------------+
4| NULL |
5+---------------------------------------------------------------------------+
SQL
1SELECT REGEXP_EXTRACT_OR_NULL('AbCdE', '([[:lower:]]+)C([[:upper:]]+)', 1);
Text
1+---------------------------------------------------------------------+
2| REGEXP_EXTRACT_OR_NULL('AbCdE', '([[:lower:]]+)C([[:upper:]]+)', 1) |
3+---------------------------------------------------------------------+
4| NULL |
5+---------------------------------------------------------------------+
SQL
1select REGEXP_EXTRACT_OR_NULL('这是一段中文 This is a passage in English 1234567', '(\\p{Han}+)(.+)', 2);
Text
1+---------------------------------------------------------------------------------------------------------+
2| REGEXP_EXTRACT_OR_NULL('这是一段中文 This is a passage in English 1234567', '(\\p{Han}+)(.+)', 2) |
3+---------------------------------------------------------------------------------------------------------+
4| This is a passage in English 1234567 |
5+---------------------------------------------------------------------------------------------------------+
