JAVA中的正则表达式模式不匹配

JAVA中的正则表达式模式不匹配,java,regex,Java,Regex,我想知道为什么这个正则表达式组不能在JAVA中为我工作?它在查找组的匹配项时引发异常。我正在尝试匹配用破折号分隔的数字 Pattern p = Pattern.compile("([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)"); Matcher matcher = p.matcher("1-1-3-1-4"); matcher.group(0); // Exception happens here - java.lang.IllegalStateExc

我想知道为什么这个正则表达式组不能在JAVA中为我工作?它在查找组的匹配项时引发异常。我正在尝试匹配用破折号分隔的数字

Pattern p = Pattern.compile("([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)");
Matcher matcher = p.matcher("1-1-3-1-4");
matcher.group(0); // Exception happens here - java.lang.IllegalStateException: No match found

您需要调用
Matcher#find()
以实际获得匹配:

Pattern p = Pattern.compile("([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)");
Matcher matcher = p.matcher("1-1-3-1-4");
if (matcher.find()) {
    System.out.println(matcher.group(0))
}
如果需要多个匹配项,可以使用
while
循环而不是
If
语句

还请注意,您的模式中实际上有五个捕获组。捕获组通过将模式的一部分放在括号中来表示。如果您不打算/需要单独捕获模式中的五个分隔的数字,那么您可以考虑告诉正则表达式引擎不捕获它们,例如使用:
Pattern p = Pattern.compile("(?:[0-9]+)-(?:[0-9]+)-(?:[0-9]+)-(?:[0-9]+)-(?:[0-9]+)");

在Java正则表达式
索引中
研究中
方法用于返回
匹配器
类匹配:

if (matcher.matches()) {
    System.out.println(matcher.group(0));
}
在上面的示例中,
matches()
“研究”方法尝试根据给定的模式匹配整个区域。您使用的方法通常表示您希望匹配的内容/方式

匹配()

尝试根据图案匹配整个区域

find()

尝试查找输入序列的下一个子序列 这与模式相符

研究方法检查输入字符串并返回一个布尔值,指示是否找到该模式


不可以。请指出,如果有任何特定的原因导致此问题,请查看。使用
matcher()
实际上不会尝试匹配任何内容。它只是设置了匹配器。您必须告诉它尝试与其中一个匹配。使用
matcher.find()
迭代所有发生的事件。这就是他使用
group
@f.khantsis所做的,它应该匹配此模式,但是,对吗?组0匹配整个模式。除此之外,还有五个捕获组。如果你能告诉我们更多关于你想在这里做什么,我可以更新我的答案。好的,我知道了,在使用matcher.find()之后,它对我有效。谢谢:)