我不断收到一个我不应该得到的错误,而且我不是正则表达式专家,但它应该是如此简单。我看了很多次,无法弄清楚它为什么不起作用。我也搜索过类似的东西,但我找不到任何有同样问题的人。
这是我得到的错误:
Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:485)
at DailyData.importUsers(DailyData.java:456)
at DailyData.main(DailyData.java:40)
这是我的代码,通过调试我找到了它给出错误的最后一行:
Pattern memberSincePattern = Pattern.compile("\\W*(\\d+):(\\d+):(\\d+)\\W*(\\d+)/(\\d+)/(\\d+)");
Matcher memberSinceMatcher = memberSincePattern.matcher("12:12:12 12/12/2012");
String msGroupOne = memberSinceMatcher.group(1);
我在Ubuntu 14.04 LTS上使用eclipse。 我已经导入了正确的库并尝试了\ d {1,2}的数字以及摆脱前导\ W *。我希望它能够为每个组抓取1或2位数字。 我也没有语法错误或警告。
答案 0 :(得分:2)
如异常所示,您需要在找到匹配的群组之前找到正则表达式的匹配。
例如,您可以使用Matcher#matches
,如下所示:
Pattern memberSincePattern = Pattern.compile("\\W*(\\d+):(\\d+):(\\d+)\\W*(\\d+)/(\\d+)/(\\d+)");
Matcher memberSinceMatcher = memberSincePattern.matcher("12:12:12 12/12/2012");
if(memberSinceMatcher.matches()) {
String msGroupOne = memberSinceMatcher.group(1);
}
这是javadoc entry for Matcher#matches
。
作为旁注,我想指出,如果您只想匹配原始String
的子序列,至少有一次,则应使用Matcher#find
代替Matcher#matches
。可能在while
循环中:)