java.util.regex.Matcher.find()
人的Javadoc说:
此方法从此匹配器区域的开始处开始,或者,如果 上一次调用该方法是成功的,并且匹配器已经 属性不匹配的第一个字符 上一场比赛.
我自己的实验表明,如果正则表达式匹配一个零长度字符串,那么该方法将从前一个(零长度)匹配的结尾开始一个字符.例如,给定输入字符串"abCabc"和正则表达式"a|b?",将在位置(0,1,2,3,4,5,6)进行连续匹配.在位置6处匹配成功之后,在位置6处匹配不成功;并且进一步的调用也返回FALSE,位置保持在6处.
文档建议,在位置2(字符"c")找到零长度匹配后,对Find的下一次调用将从"第一个字符不匹配"开始,它仍然位于位置2.
文档还建议,在位置6匹配失败后,下一次调用应从位置0开始,但情况似乎并非如此.
文档是不是完全错了?
有没有更精确的规则,例如涵盖第六位行为的规则?
我问这个问题的原因是,我正在try 用C#编写该方法的模拟,而通过反复试验来重现准确的行为时遇到了困难.