[英]Regex and capturing parenthesis
我試圖理解捕獲括號是如何為正則表達式工作但我不明白...
我的代碼是:
Pattern pattern = Pattern.compile("ab"); Matcher m = pattern.matcher("abc"); while (m.find()) { for (int i = 0; i < m.groupCount(); i++) { System.out.println(m.group(i)); } }
所以我根本沒有顯示。 我的理解是我需要一個捕獲括號來記住匹配的結果並顯示它。
所以我做了 :
Pattern pattern = Pattern.compile("(ab)"); Matcher m = pattern.matcher("abc");
我有預期的顯示:ab
然后我想記住並只顯示匹配結果的一部分,所以我做了:
Pattern pattern = Pattern.compile("(a)b"); Matcher m = pattern.matcher("abc");
我原以為:a,但我有:ab
為什么?
來自Matcher#group()
的javadoc:
捕獲組從左到右編制索引,從1開始。 組零表示整個模式,因此表達式m.group(0)等效於m.group()。
問題是組零(即m.group(0)
)匹配整個模式,而不是捕獲括號內的模式。 因此,為了匹配您想要的組,您需要從索引1開始並結束直到組計數:
for (int i = 1; i <= m.groupCount(); i++) {
System.out.println(m.group(i));
}
在您的情況下,您只有一個組。 但如果你有類似Pattern.compile("(a)(b)")
,那么(a)
將匹配組1, (b)
匹配組2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.