分組構造使您可以
捕獲子表示式組並提高具有非捕獲**先行和回顧後發修飾符的正規表示式的效率。下表描述了正規表示式分組構造。
分組構造
說明()
捕獲匹配的子字串(或非捕獲組;有關詳細資訊,請參見正規表示式選項中的explicitcapture選項)。使用 () 的捕獲根據左括號的順序從 1 開始自動編號。捕獲元素編號為零的第乙個捕獲是由整個正規表示式模式匹配的文字。
(?)
將匹配的子字串捕獲到乙個組名稱或編號名稱中。用於 name 的字串不能包含任何標點符號,並且不能以數字開頭。可以使用單引號替代尖括號,例如(?'name')
。
(?)
平衡組定義。刪除先前定義的 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 的第乙個捕獲總是指整個模式)。
編號名稱模式
00(預設名稱)
((?abc)/d+)?(?xyz)(.*)
11(預設名稱)
((?abc)/d+)
22(預設名稱)
(.*)
31
(?abc)
42
(?xyz)
正規表示式的分組構造
分組構造描述了正規表示式的子表示式,通常用於捕獲輸入字串的子字串。下表描述了正規表示式分組構造。分組構造 說明 子表示式 捕獲匹配的子表示式 或非捕獲組 有關更多資訊,請參見正 則表示式選項 中的explicitcapture選項 使用 的捕獲基於左括號按順序從 1 開始自動編號。捕獲元素編號為零的...
正規表示式 分組
正規表示式對於單個字元的重複,非常方便。比如 d 表示1個或多個數字,表示重複0次或多次 重複1次或多次 重複0次或1次 重複n次 重複n次或多次 重複n次到m次 指定的字元後加特定的限定符,即可實現單字元的重複,那麼,對於一組字串的重複,正規表示式該如何操作?用小括號來指定子表示式 或稱分組 對指...
分組 正規表示式
在正規表示式中,可以用小括號將一些規則括起來當作分組,分組可以作為乙個元字元來看待。d d這是乙個簡單的且不完善的匹配 ip 位址的正規表示式,因為它除了能匹配正確的 ip 位址外,還能匹配如 322.197.578.888 這種不存在的 ip 位址。當然,用這個表示式簡單匹配成功後可以在利用 ph...