正则表达式捕获组
您可以在正则表达式中使用一对括号将子模式括起来,以定义一个
组“”
。您可以使用 regex 组执行以下操作:- 一次性将正则表达式运算符和量词应用于整个组。
- 创建捕获组。您可以使用捕获组来指定要从正则表达式保存或返回的匹配值。默认情况下,组会捕获生成匹配项的文本。系统会在内存中捕获与分组中的子表达式匹配的字符串部分,以供以后检索或使用。
- 创建非捕获组。
组编号
一个正则表达式可以有多个组,并且这些组可以嵌套。从第一个左括号开始,从左到右对组进行 1-
n
编号。始终存在一个包含整个匹配项的隐式组零 (0)。示例:(a(b*))+(c)
此模式包含 3 组:
group 1: (a(b*)) group 2: (b*) group 3: (c)
捕获组和 REGEX 函数
您可以使用
REGEX
函数来提取字符串的一部分该 REGEX
函数仅返回 第一个
捕获组的值。假设您有一个名为
“电子邮件”
的名称字段,其中包含采用以下模式的电子邮件地址: 用户名
@提供商
。 “”域
您可以使用 REGEX
函数,在 电子邮件
字段中仅返回电子邮件地址的 提供商
部分:REGEX([email],"^[a-zA-Z0-9._%+-]+@
([a-zA-Z0-9._-]+)
\.[a-zA-Z]{2,4}$")捕获组和 REGEX_REPLACE 函数
您可以使用
REGEX_REPLACE
函数来匹配字符串,并将匹配的字符串替换为其他值。该 REGEX_REPLACE
函数接受 3 个参数:- 输入字符串
- 匹配的正则表达式
- 替换正则表达式
您可以使用捕获组来捕获反向引用,但系统始终会返回整个匹配项。
捕获组和反向引用
您可以使用反向引用来重新引用特定捕获组编号的匹配内容。通常,您在包含捕获组的同一正则表达式中使用反向引用。可通过引用以反斜杠开头的组编号来指定反向引用。用途
\1
引用捕获组 1: \2
以引用捕获组 2,依此类推。假设您要匹配一对 HTML 标记及其包含的文本。您可以将开始标记捕获到捕获组中,然后使用反向引用来匹配相应的结束标记:
(<([A-Z][A-Z0-9]*)\b[^>]*>.*?</\2>)
此正则表达式包含 2 个捕获组:
- 组 1 包含最外层括号并捕获整个字符串。
- 组 2 获取与“”匹配的字符串[A-Z][A-Z0-9]*。
然后,您可以使用引用组 2。
\2
使用反向引用来匹配相应的结束 HTML 标记。当您使用
REGEX_REPLACE
函数时,您可以使用反向引用来引用上一个 正
则表达式中的捕获组。如果使用反向引用来引用前一个正则表达式中的组,语法会略有不同。使用美元符号 ($
)前的组编号,例如 $1
以指定对上一个表达式的组 1 的反向引用。假设您有一个
Phone_number
字段,其值格式如下 xxx.xxx.xxxx
。以下示例匹配 Phone_number
中的值,并将这些值替换为以下格式的值: (xxx)
xxx-xxxx
:REGEX_REPLACE([phone_number],"([0-9]{3})\.([[0-9]]{3})\.([[0-9]]{4})","\($1\) $2-$3")
请注意替换表达式中的反向引用。它们引用上一个匹配表达式的捕获组。
非捕获组
在某些情况下,您可能希望使用括号对子模式进行分组,但
不想
捕获文本。非捕获组以 开头。 (?:
(左括号后跟一个问号和冒号)。例如, h(?:a|i|o)t
匹配项 hat
或 hit
或 hot
,但不会捕获 a
, i
,或 o
从子表达式