2016-11-05 54 views
0

我想組[1]應該是「xyz」,組[2]應該是這個輸入字符串的'ab'。正則表達式不捕獲預期組

String p = "(.+)\\s(ab|cd|efg)"; 

Pattern pattern = Pattern.compile(p); 

String str = "xyz ab"; 

Matcher m = pattern.matcher(str); 

System.out.println(m.group(1)); 
System.out.println(m.group(2)); 
+0

謝謝你爲這個鏈接一個很好的做法,我修好了。 – user697911

回答

1

你必須調用m.find()

String p = "(.+)\\s(ab|cd|efg)"; 

    Pattern pattern = Pattern.compile(p,Pattern.DOTALL); 

    String str = "xyz ab"; 

    Matcher m = pattern.matcher(str); 

    if (m.find()) { 
     System.out.println(m.group(1)); 
     System.out.println(m.group(2)); 
    } 

find()試圖找到該模式匹配的輸入序列的下一個子。

輸出:

xyz 
ab 

你也可以取組之前調用m.matches();,而不是if (m.find())但它的使用find()matches()if驗證發現匹配