跳至主要内容
Workday User Guide
上次更新时间 :2023-06-23
正则表达式捕获组

正则表达式捕获组

您可以在正则表达式中使用一对括号将子模式括起来,以定义一个
组“”
。您可以使用 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
从子表达式