引用java規範
組和捕獲
捕獲組可以通過從左到右計算其開括號來編號。例如,在表達式 ((A)(B(C))) 中,存在四個這樣的組:
1 ((A)(B(C))) 2 \A 3 (B(C)) 4 (C)
組零始終代表整個表達式。
之所以這樣命名捕獲組是因爲在匹配中,保存了與這些組匹配的輸入序列的每個子序列。捕獲的子序列稍後可以通過 Back 引用在表達式中使用,也可以在匹配操作完成後從匹配器檢索。
與組關聯的捕獲輸入始終是與組最近匹配的子序列。如果由於量化的緣故再次計算了組,則在第二次計算失敗時將保留其以前捕獲的值(如果有的話)例如,將字符串 "aba" 與表達式 (a(b)?)+ 相匹配,會將第二組設置爲 "b"。在每個匹配的開頭,所有捕獲的輸入都會被丟棄。
以 (?) 開頭的組是純的非捕獲 組,它不捕獲文本,也不針對組合計進行計數。