JAVA中的正则表达式模式不匹配
我想知道为什么这个正则表达式组不能在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
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()之后,它对我有效。谢谢:)