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”并提取它,但是当我使用此正则表达式时,由于某种原因它失败了。它抛出“找不到匹配”。
我尝试进入调试模式,它似乎无法提取字符串的特定部分。我究竟做错了什么?我的正则表达式错了吗?它似乎与我试过的所有在线正则表达式建造者/测试者相匹配。
答案 0 :(得分:1)
您需要先调用Matcher#find
(或Matcher#matches
),然后才能调用Matcher#group
。
否则,匹配过程永远不会发生,并且会引发IllegalStateException
。
匹配器的显式状态最初是未定义的;试图 在成功匹配之前查询它的任何部分将导致 抛出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