数字正则表达式没有匹配

时间:2014-08-05 01:22:28

标签: java regex eclipse ubuntu

我不断收到一个我不应该得到的错误,而且我不是正则表达式专家,但它应该是如此简单。我看了很多次,无法弄清楚它为什么不起作用。我也搜索过类似的东西,但我找不到任何有同样问题的人。

这是我得到的错误:

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位数字。 我也没有语法错误或警告。

1 个答案:

答案 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循环中:)