捕獲組有兩種形式
一種是普通的捕獲組,不產生歧義的情況下,后面簡稱捕獲組,語法規則:(expression);
另一種是命名捕獲組,語法規則:(?<name>expression)或者(?'name'expression),這兩種寫法是等價的。
1、編號規則
如果沒有顯式為捕獲組命名,即沒有使用命名捕獲組,那么需要按數字順序來訪問所有捕獲組
在只有普通捕獲組的情況下,捕獲組的編號是按照“(”出現的順序,從左到右編號的
(/d{4})-(/d{2}-(/d/d))
1 1 2 3 3 2
上面的正則表達式可以用來匹配格式為yyyy-MM-dd的日期,為了在下表中得以區分,采用了/d{2}和/d/d兩種寫法
還有一個默認編號為0的組,表示的是正則表達式的整體
用以上正則表達式匹配字符串:2008-12-31
匹配結果為:
編號 | 命名 | 捕獲組 | 匹配內容 |
0 | | (/d{4})-(/d{2}-(/d/d)) | 2008-12-31 |
1 | | (/d{4}) | 2008 |
2 | | (/d{2}-(/d/d)) | 12-31 |
3 | | (/d/d) | 31 |
如果對組進行了顯式命名,即命名捕獲組,那么捕獲的內容可以通過組名稱來引用
但是如果正則表達式中既使用了普通捕獲組,也使用了命名捕獲組,那么捕獲組的編號就要特別注意,編號的規則是先對普通捕獲組進行編號,再對命名捕獲組進行編號
(/d{4})-(?<date>/d{2}-(/d/d))
1 1 3 2 23
用以上正則表達式匹配字符串:2008-12-31
匹配結果為:
編號 | 命名 | 捕獲組 | 匹配內容 |
0 | | (/d{4})-(/d{2}-(/d/d)) | 2008-12-31 |
1 | | (/d{4}) | 2008 |
2 | | (/d/d) | 31 |
3 | date | (?<date>/d{2}-(/d/d)) | 12-31 |
2、捕獲組的引用
對捕獲組的引用一般有以下幾種
a) 正則表達式中,對前面捕獲組捕獲的內容進行引用,稱為反向引用
b) 正則表達式中,(?(表達式)true|false)的條件表達式
c) 在程序中,對捕獲組捕獲內容的引用
反向引用
對于普通捕獲組的引用,語法規則為:/k<num>,通常簡寫為/num,其中num是十進制的數字,即捕獲組的編號
對于命名捕獲組的引用,語法規則為:/k<name>或者/k'name'