我仍然无法理解 matches() 和 find() 的差异,这里是代码
final Matcher subMatcher = Pattern.compile("\\d+").matcher("123");
System.out.println("Found : " + subMatcher.matches());
System.out.println("Found : " + subMatcher.find());
输出为
发现:true
发现:错误
我对匹配的理解并从中找到answer ,是 matches() 尝试匹配整个字符串,而 find() 仅尝试匹配下一个匹配子字符串,并且匹配器添加 ^ 和 $ 元字符来开始和开始,并且 find() 可以有不同的结果,如果我们多次使用它,但这里 123 仍然是一个子字符串,第二个输出应该是 true。如果我注释掉第二行,那么它确实将输出显示为 true
最佳答案
当您调用matches()
时,Matcher
已搜索匹配项(整个 String
)。调用find
Matcher
将尝试在当前匹配之后再次查找该模式,但由于在匹配整个 String
的匹配之后没有留下任何字符。 , find
返回false
.
搜索String
再次,您需要创建一个新的 Matcher
或调用reset()
:
final Matcher subMatcher = Pattern.compile("\\d+").matcher("123");
System.out.println("Found : " + subMatcher.matches());
subMatcher.reset();
System.out.println("Found : " + subMatcher.find());
关于Java 正则表达式、匹配和查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38953016/