2012-07-19 77 views
1

我寫這個正則表達式:捕獲組

String REGEX = "^\\s+something\\s+(not\\s+)?else\\s+((\\d+|\\d+-\\d+),\\s+)*(\\d+|\\d+-\\d+)$"; 

這裏是我的主要方法:

public static void main(String... args) { 
    Matcher matcher = PATTERN.matcher(" something else 1, 3, 4, 5-7"); 
    if (matcher.matches()) { 
     for (int index = 0; index <= matcher.groupCount(); index++) { 
     System.out.println(index + ": " + matcher.group(index)); 
     } 
    } 
    } 

,這裏是我的輸出:

0: match cos 1, 3, 4, 5-7 
1: null 
2: 4, 
3: 4 
4: 5-7 

好像13沒有被捕獲。 (輸出45-7都沒問題。)如何修復我的正則表達式,以便我可以捕獲它們(並在最後不用逗號捕獲它們)?

回答

2

如果你的目標是找到由something else預測或something not else那麼也許它們組合在一個組,然後用,\\s+分割數,例如

String REGEX = "^\\s+something\\s+(not\\s+)?else\\s+((((\\d+|\\d+-\\d+),\\s+)*)(\\d+|\\d+-\\d+))$"; 
Pattern PATTERN = Pattern.compile(REGEX); 
Matcher matcher = PATTERN.matcher(" something else 1, 3, 4, 5-7"); 
if (matcher.matches()) { 
    System.out 
      .println(Arrays.toString(matcher.group(2).split(",\\s+"))); 
} 

輸出:

[1, 3, 4, 5-7] 
+0

謝謝,我會這樣做。 – 2012-07-19 01:07:34

+0

爲了記錄,'((\\ d + | \\ d + - \\ d +),\\ s +)*'部分與第一個重複中的「1」,第二個中的「」3「'匹配重複,然後在第三個也是最後一個重複中輸入「4」。 – MRAB 2012-07-19 01:09:12