Java正则表达式匹配器不返回任何匹配项

时间:2015-10-28 10:34:27

标签: java regex

Pattern pattern = Pattern.compile("\\du\\d\\d{0,1}_x(32|64)");
Matcher matcher = pattern.matcher("windows_6u31_x32.jar");
System.out.println(matcher.group(0));

我正在尝试匹配字符串“6u31_x32”并提取它,但是当我使用此正则表达式时,由于某种原因它失败了。它抛出“找不到匹配”。

我尝试进入调试模式,它似乎无法提取字符串的特定部分。我究竟做错了什么?我的正则表达式错了吗?它似乎与我试过的所有在线正则表达式建造者/测试者相匹配。

1 个答案:

答案 0 :(得分:1)

您需要先调用Matcher#find(或Matcher#matches),然后才能调用Matcher#group

否则,匹配过程永远不会发生,并且会引发IllegalStateException

来自documentation

  

匹配器的显式状态最初是未定义的;试图   在成功匹配之前查询它的任何部分将导致   抛出IllegalStateException。匹配器的显式状态是   每次比赛操作重新计算。

将您的代码更改为:

Pattern pattern = Pattern.compile("\\du\\d\\d{0,1}_x(32|64)");
Matcher matcher = pattern.matcher("windows_6u31_x32.jar");
// executing matcher
if (matcher.find()) {
    System.out.println(matcher.group(0));
}

<强>输出

6u31_x32