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
從子運算式中選取「」。