1
public static void main(String args[]) {
    Pattern p = Pattern.compile("ab");  // Case 1
    Pattern p = Pattern.compile("bab");  // Case 2
    Matcher m = p.matcher("abababa");
    while(m.find()){
        System.out.print(m.start());
    }
}

当我使用Case 1时,输出为024正如预期的那样。但是,当我使用案例 2时,输出为1,但我预期为13。因此,任何人都可以向我解释,是否有任何异常规则regex会导致此输出,如果没有的话。然后,为什么我得到这个输出。

帮助赞赏!

注:案例 1 和案例 2 独立使用。

4

2 回答 2

2

匹配消耗输入,因此在上一个匹配结束找到下一个匹配:

每次匹配前“bab”匹配器指针的位置为:

  1. |abababa
  2. abab|aba
于 2012-12-26T18:18:51.763 回答
0

对于案例 2:

这是因为,在它搜索之后bab,它不会考虑已经搜索过的 char(b 在这种情况下是索引 3),因此你只会得到 1。

Input:  abababa
Search for bab, 
 find's a match starting at index 1 and ending at index 3, next the search would start at index 4(aba)
于 2012-12-26T18:19:09.283 回答