基本捕獲組

一個是包含在括號 () 一個正規表示式的一部分。這通常稱為子表示式,有兩個目的:

  • 它使子表示式成為原子,即它將匹配,失敗或重複整體。
  • 它匹配的文字部分可以在表示式的其餘部分和程式的其餘部分中訪問。

組在正規表示式引擎中編號,從 1 開始。傳統上,最大組編號為 9,但許多現代正規表示式支援更高的組計數。組 0 總是匹配整個模式,用括號圍繞整個正規表示式的方式相同。

無論這些組是一個接一個地放置還是巢狀,序數都會隨著每個左括號而增加:

foo(bar(baz)?) (qux)+|(bla)
   1   2       3      4

團體和他們的數字

在表示式達到總體匹配後,其所有組都將被使用 - 無論特定組是否已設法匹配任何內容。

一個組可以是可選的,如上面的 (baz)?,或者是表達中未使用匹配的替代部分,如上面的 (bla)。在這些情況下,不匹配的組不會包含任何資訊。

如果量詞放在一個組後面,如上面的 (qux)+,則表示式的整體組計數保持不變。如果一個組匹配多次,則其內容將是最後一次匹配。但是,現代正規表示式風格允許訪問所有子匹配事件。

如果你希望檢索日誌條目的日期和錯誤級別,如下所示:

2012-06-06 12:12.014 ERROR: Failed to connect to remote end

你可以使用這樣的東西:

^(\d{4}-\d{2}-\d{2}) \d{2}:\d{2}.\d{3} (\w*): .*$

這將提取日誌條目 2012-06-06 的日期作為捕獲組 1,並將錯誤級別 ERROR 作為捕獲組 2。