2013-03-01 69 views
6

代碼:簡單的Java正則表達式匹配不工作

import java.util.regex.*; 

public class eq { 
    public static void main(String []args) { 
     String str1 = "some=String&Here&modelId=324"; 
     Pattern rex = Pattern.compile(".*modelId=([0-9]+).*"); 
     Matcher m = rex.matcher(str1); 
     System.out.println("id = " + m.group(1)); 
    } 
} 

錯誤:

Exception in thread "main" java.lang.IllegalStateException: No match found 

我在做什麼錯在這裏?

回答

16

你需要調用find()Matcher後,才能調用group()和相關的功能,查詢有關匹配的文本或操縱它(start()end()appendReplacement(StringBuffer sb, String replacement)等)。

所以你的情況:

if (m.find()) { 
    System.out.println("id = " + m.group(1)); 
} 

這將找到第一比賽(如果有的話),並提取由正則表達式匹配的第一個捕獲組。如果要查找輸入字符串中的所有匹配項,請將if更改爲while循環。

2

您必須在調用group()前加入這一行:

m.find(); 

這將指針移動到下一場比賽的開始,如果有的話 - 如果找到匹配的方法返回true。

通常,這是你如何使用它:

if (m.find()) { 
    // access groups found. 
}