在下文中,我希望第二个 find() 成功,但事实并非如此。为什么?
Matcher matcher =
Pattern.compile("\\s*asdf").matcher("apple banana cookie");
// returns false as expected
matcher.find();
// resets groups (that weren't being explicitly being used anyway), but not state.
matcher.usePattern(Pattern.compile("\\s*banana"));
// returns false, expected true.
System.out.println(matcher.find());
如果量词从第一个正则表达式中删除(变成简单的“asdf”),第二个匹配成功。查看 Matcher 对象会发现,在第一次不成功的 find() 之后存储了某种组信息,尽管我没想到会这样。Find()应该从开头(如果没有以前的匹配项)或最后一次成功匹配的索引处开始。UsePattern()应该保留匹配器在输入中的位置,并丢弃组信息(同样,我没有明确使用)。
我错过了一些东西,但我不知道是什么。我怀疑我必须用 lookingAt() 来实现它并更新区域(例如这个例子),但我不知道为什么这种方法不起作用。