与量词不匹配后,Java的matcher.find()会保留哪种状态?

| 在下面,我希望第二个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()应该保留Matcher在输入中的位置,并丢弃组信息(同样,我没有显式使用它)。 我缺少了一些东西,但我不知道。我怀疑我必须使用lookingAt()来实现这一点并更新区域(例如本示例),但是我不知道为什么这种方法行不通。     
已邀请:
        看来文档有点误导(或者实际上,它只是没有指定)失败后调用ѭ1时的行为。 我想期望的用法是反复调用
find()
,直到失败为止,但在失败后才重设它。 查看源代码可确认
Matcher
具有一个索引(字段
last
),当执行下一个\'find()\'时,它会从该索引开始搜索,而当
find()
失败时,该索引将前进至末尾且不是重启。
reset()
重置该索引,
usePattern()
不重置。     
        您的第一个正则表达式会消耗整个字符串
(\\\\\\\\s*)
。当第二个正则表达式运行时,没有其他匹配项。 如果您拨打
matcher.reset()
,它将按预期工作。     

要回复问题请先登录注册