Java正则表达式,匹配和查找

时间:2016-08-15 10:00:07

标签: java regex

我仍然无法理解matches()和find()中的差异,这里是代码

final Matcher subMatcher = Pattern.compile("\\d+").matcher("123");
System.out.println("Found : " + subMatcher.matches());
System.out.println("Found : " + subMatcher.find());

输出

Found : true Found : false

我对匹配的理解和从answer中找到的是,matches()尝试匹配整个字符串,而find()只尝试匹配下一个匹配的子字符串,匹配器添加^和$ meta-character开始和开始,如果我们多次使用它,find()会有不同的结果,但是这里仍然是123子串,第二个输出应该是真的。如果我注释掉第二行,那么它确实显示输出为真

1 个答案:

答案 0 :(得分:4)

当您致电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());