跳到主要内容
版本:Latest-3.2

regexp_extract_all

功能

str 中提取与正则表达式 pattern 相匹配的子字符串并返回一个字符串数组。字符串必须匹配 pos 指定的正则分组。

在正则表达式中,分组是用括号 () 包裹起来的。一个 pattern 可能包含多个组,按照括号从左到右进行编号,起始数为 1。比如 ([[:lower:]]+)C([[:lower:]]+) 包含两个分组,C 左边的 ([[:lower:]]+) 为第一个分组,右边的 ([[:lower:]]+) 为第二个分组。该正则表达式匹配大写字母 C 左边和右边的小写字母。

pattern 必须完全匹配 str 的一部分。如果没有匹配的字符串,返回空字符串。

该函数从 2.5.19 版本开始支持。

语法

ARRAY<VARCHAR> regexp_extract_all(VARCHAR str, VARCHAR pattern, BIGINT pos)

参数说明

  • str:要提取字符的字符串。

  • pattern: 待匹配的正则模式。

  • pos: pattern 中可能包含多个分组,pos 用于指定第几个组,从 1 开始。

返回值说明

返回一个字符串数组。

示例

-- 返回 pattern 中第一个分组匹配到的所有字符。
MySQL > SELECT regexp_extract_all('AbCdE', '([[:lower:]]+)C([[:lower:]]+)', 1);
+-------------------------------------------------------------------+
| regexp_extract_all('AbCdE', '([[:lower:]]+)C([[:lower:]]+)', 1) |
+-------------------------------------------------------------------+
| ['b'] |
+-------------------------------------------------------------------+

-- 返回 pattern 中第二个分组匹配的所有字符。
MySQL > SELECT regexp_extract_all('AbCdExCeF', '([[:lower:]]+)C([[:lower:]]+)', 2);
+---------------------------------------------------------------------+
| regexp_extract_all('AbCdExCeF', '([[:lower:]]+)C([[:lower:]]+)', 2) |
+---------------------------------------------------------------------+
| ['d','e'] |
+---------------------------------------------------------------------+

Keywords

REGEXP_EXTRACT_ALL,REGEXP,EXTRACT