在下面,我希望第二个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());
Run Code Online (Sandbox Code Playgroud)
如果量化器从第一个正则表达式中删除(变为简单的"asdf"),则第二个匹配成功.查看Matcher对象会发现在第一个不成功的find()之后存储了某种组信息,尽管我没想到它.Find()应该从头开始(如果没有前一个匹配)或者在上一次成功匹配的索引处开始.UsePattern()应该保留Matcher在输入中的位置,并丢弃组信息(同样,我没有明确使用).
我错过了什么,但我不知道是什么.我怀疑我必须使用lookingAt()并更新区域(例如此示例)来实现它,但我不知道为什么这种方法不起作用.