跳至主要內容
Workday User Guide
上次更新時間 :2023-06-23
Regex 擷取群組

Regex 擷取群組

您可以在規則運算式中的子模式前後使用一對括號來定義
群組「」
。您可以使用規則運算式群組來執行以下操作︰
  • 一次將 regex 運算子和量詞套用至整個群組。
  • 建立擷取群組。
    您可以使用擷取群組,指定要儲存或從規則運算式傳回的相符值。預設情況下,群組
    會擷取
    產生相符項目的文字。系統會在記憶體中擷取與分組子運算式相符的字串部分,以供日後擷取或使用。
  • 建立非擷取群組。

群組編號

一個規則運算式可以有多個群組,且這些群組可以內嵌。群組
從左到右
編號,從第一個左括號開始。一律有隱含的群組零 (0),其中包含完整的配對項目。範例︰
(a(b*))+(c)
此模式包含 3 個群組︰
group 1: (a(b*)) group 2: (b*) group 3: (c)

擷取群組和 REGEX 函數

您可以使用
REGEX
函數,以擷取字串的一部分。該
REGEX
函數僅會傳回
第一個
擷取群組的值。
假設您有一個名為
電子郵件
的欄位名稱,其中包含的電子郵件地址採用以下模式︰
username
@
provider
網域
。您可以使用
REGEX
函數︰僅從
電子郵件
欄位傳回電子郵件地址的
提供者
部分︰
REGEX([email],"^[a-zA-Z0-9._%+-]+@
([a-zA-Z0-9._-]+)
\.[a-zA-Z]{2,4}$")

擷取群組和 REGEX_REPLACE 函數

您可以使用
REGEX_REPLACE
函數來比對字串,並以另一個值取代相符的字串。該
REGEX_REPLACE
函數接受 3 個引數︰
  • 輸入字串
  • 比對 regex
  • 取代規則運算式
您可以使用擷取群組來擷取反向參照,但係統一律會傳回整個配對項目。

擷取群組和反向參照

您可以使用反向參照,向後參照特定擷取群組號碼的相符內容。通常,您會在包含擷取群組的同一個規則運算式中使用反向參照。您可以參照前面加上反斜線的群組號碼,指定反向參照。使用
\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
從子運算式中選取「」。