【问题标题】:java regex isn't matching when it should [duplicate]java正则表达式不匹配时应该[重复]
【发布时间】:2014-07-31 02:12:47
【问题描述】:
Matcher headerMatcher = Pattern.compile("([a-zA-Z]+[a-zA-Z\\s]*)[\\s]+(\\d+)")
                               .matcher("jumping around 9");

因此,第一个捕获组应该是任何包含至少一个字母字符的字符串。 以下是这方面的例子:

  • 示例一
  • A B C
  • A b c d e ff ee ggg aaa

第二个捕获组只是数字。

  • 1
  • 22
  • 333

所以,这是我捕捉这两个群体的尝试:

System.out.println(headerMatcher.group(1));
System.out.println(headerMatcher.group(2));

结果如下:

run:
Exception in thread "main" java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.group(Matcher.java:485)
    at Main.main(Main.java:51)
Java Result: 1

http://www.regexplanet.com/advanced/java/index.html测试后
这是我的预期:

有些不对劲,我不知道为什么。

【问题讨论】:

  • 我从该帖子中接受的答案中发现的问题是它没有明确说明用户需要调用Matcher#matches 函数的原因。它只是说他们必须这样做。我相信@anubhava 给出的答案对于这个问题的总体响应更有帮助。
  • 是的,不是对答案提出异议,只是指出问题本质上是相互重复的。

标签: java regex


【解决方案1】:

如果你在调用Matcher#group(int)之前没有调用Matcher#matchesMatcher#find,你将得到java.lang.IllegalStateException

【讨论】:

  • 谢谢,就是这样。 6 分钟后接受答案。
【解决方案2】:

错误 No match found at java.util.regex.Matcher.group(...) 只是说明接收到的字符串在任何地方都不匹配正则表达式。

您想使用: if(matcher.find())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2018-06-23
    相关资源
    最近更新 更多