簡體   English   中英

正則表達式和捕獲括號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM