分組構造描述了正規表示式的子表示式,通常用於捕獲輸入字串的子字串。下表描述了正規表示式分組構造。
分組構造
說明(子表示式)
捕獲匹配的子表示式(或非捕獲組;有關更多資訊,請參見正 則表示式選項 中的explicitcapture選項)。使用()的捕獲基於左括號按順序從 1 開始自動編號。捕獲元素編號為零的第乙個捕獲是由整個正規表示式模式匹配的文字。
(?<name>子 表示式)
將匹配的子表示式捕獲到乙個組名稱或編號名稱中。用於 name 的字串不得包含任何標點符號,並且不能以數字開頭。可以使用單引號替代尖括號,例如 (?'name') 。
(?<name1-name2>子表示式)
(平衡組定義。)刪除先前定義的 name2 組的定義,並在 name1 組中儲存先前定義的 name2 組和當前組之間的間隔。如果未定義 name2 組,則匹配將回溯。由於刪除 name2 的最後乙個定義會顯示 name2 的先前定義,因此該構造允許將 name2 組的捕獲堆疊用作計數器,用於跟蹤巢狀構造(如括號)。在此構造中,name1 是可選的。可以使用單引號替代尖括號,例如 (?'name1-name2') 。
有關更多資訊,請參見本主題中的示 例 。
(?:子表示式)
(非捕獲組。)不捕獲由子表示式匹配的子字串。
(?imnsx-imnsx:子表示式)
應用或禁用子表示式中指定的選項。例如,(?i-s: ) 將開啟不區分大小寫並禁用單行模式。有關更多資訊,請參見正 則表示式選項 。
(?=子表示式)
(零寬度正**先行斷言。)僅當子表示式在此位置的右側匹配時才繼續匹配。例如,"w+(?="d) 與後跟數字的單詞匹配,而不與該數字匹配。此構造不會回溯。
(?!子表示式)
(零寬度負**先行斷言。)僅當子表示式不在此位置的右側匹配時才繼續匹配。例如,"b(?!un)"w+"b 與不以 un 開頭的單詞匹配。
(?<=子表示式)
(零寬度正回顧後發斷言。)僅當子表示式在此位置的左側匹配時才繼續匹配。例如,(?<=19)99 與跟在 19 後面的 99 的例項匹配。此構造不會回溯。
(?子表示式)
(零寬度負回顧後發斷言。)僅當子表示式不在此位置的左側匹配時才繼續匹配。
(?>子表示式)
(非回溯子表示式(也稱為「貪婪」子表示式)。)該子表示式僅完全匹配一次,然後就不會逐段參與回溯了。(也就是說,該子表示式僅 與可由該子表示式單獨匹配的字串匹配。)
預設情況下,如果匹配未成功,回溯會搜尋其他可能的匹配。如果已知無法成功回溯,可以使用非回溯子表示式避免不必要的搜尋,從而提 高效能。
命名捕獲基於左括號按從左到右的順序依次編號(與非命名捕獲類似),但在對所有非命名捕獲進行計數之後才開始對命名捕獲編號。例如,模式 ((?abc)/d+)?(?xyz)(.*) 按編號和名稱產生下列捕獲組。(編號為 0 的第乙個捕獲總是指整個模式)。
編號 名稱 模式
0(預設名稱)
((?abc)/d+)?(?xyz)(.*)
1(預設名稱)
((?abc)/d+)
2(預設名稱)
(.*)
(?abc)
(?xyz)
下面的**示例演示使用平衡組定義匹配輸入字串中的左右尖括號 (<>)。在該示例中,像使用堆疊那樣使用 open 組和 close 組的捕獲集合來跟蹤尖括號配對:將所捕獲的各左尖括號放入 open 組的捕獲集合中;將所捕獲的各右尖括號放入 close 組的捕獲集合中;平衡組定義確保每個左尖括號均有乙個匹配的右尖括號。
正規表示式 分組構造
分組構造使您可以 捕獲子表示式組並提高具有非捕獲 先行和回顧後發修飾符的正規表示式的效率。下表描述了正規表示式分組構造。分組構造 說明 捕獲匹配的子字串 或非捕獲組 有關詳細資訊,請參見正規表示式選項中的explicitcapture選項 使用 的捕獲根據左括號的順序從 1 開始自動編號。捕獲元素編...
正規表示式 分組
正規表示式對於單個字元的重複,非常方便。比如 d 表示1個或多個數字,表示重複0次或多次 重複1次或多次 重複0次或1次 重複n次 重複n次或多次 重複n次到m次 指定的字元後加特定的限定符,即可實現單字元的重複,那麼,對於一組字串的重複,正規表示式該如何操作?用小括號來指定子表示式 或稱分組 對指...
分組 正規表示式
在正規表示式中,可以用小括號將一些規則括起來當作分組,分組可以作為乙個元字元來看待。d d這是乙個簡單的且不完善的匹配 ip 位址的正規表示式,因為它除了能匹配正確的 ip 位址外,還能匹配如 322.197.578.888 這種不存在的 ip 位址。當然,用這個表示式簡單匹配成功後可以在利用 ph...