小编Ric*_*her的帖子

在与量词不匹配后,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());
Run Code Online (Sandbox Code Playgroud)

如果量化器从第一个正则表达式中删除(变为简单的"asdf"),则第二个匹配成功.查看Matcher对象会发现在第一个不成功的find()之后存储了某种组信息,尽管我没想到它.Find()应该从头开始(如果没有前一个匹配)或者在上一次成功匹配的索引处开始.UsePattern()应该保留Matcher在输入中的位置,并丢弃组信息(同样,我没有明确使用).

我错过了什么,但我不知道是什么.我怀疑我必须使用lookingAt()并更新区域(例如此示例)来实现它,但我不知道为什么这种方法不起作用.

java regex matcher

1
推荐指数
1
解决办法
341
查看次数

标签 统计

java ×1

matcher ×1

regex ×1