【问题标题】:Java regex matcher returns no matches [duplicate]Java正则表达式匹配器不返回匹配项[重复]
【发布时间】:2015-10-28 18:35:34
【问题描述】:
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”并提取它,但是当我使用这个正则表达式时,由于某种原因它失败了。它会抛出“未找到匹配项”。

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

【问题讨论】:

  • 你没有执行匹配器。看看this demo

标签: java regex


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2012-10-31
    相关资源
    最近更新 更多