跳到主要内容

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 |
+---------------------------------------------------------------------------------------------------------+