与量词不匹配后,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()来实现这一点并更新区域(例如本示例),但是我不知道为什么这种方法行不通。
没有找到相关结果
已邀请:
2 个回复
锯康
,直到失败为止,但在失败后才重设它。 查看源代码可确认
具有一个索引(字段
),当执行下一个\'find()\'时,它会从该索引开始搜索,而当
失败时,该索引将前进至末尾且不是重启。
重置该索引,
不重置。
翁茄口霉氖
。当第二个正则表达式运行时,没有其他匹配项。 如果您拨打
,它将按预期工作。