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