在java中使用正则表达式进行模式搜索

时间:2012-12-26 18:16:33

标签: java regex pattern-matching matcher

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());
    }
}

当我使用案例1 时,按预期输出 024 。但是,当我使用案例2 时,输出 1 ,但我预计 13 。所以,任何人都解释一下,regex中是否存在任何例外规则,如果不是,则导致此输出。那么,为什么我得到这个输出。

帮助赞赏!!

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

2 个答案:

答案 0 :(得分:2)

匹配消耗输入,因此在上一场比赛结束后找到下一场比赛:

每场比赛前“bab”匹配器指针的位置为:

  1. |abababa
  2. abab|aba

答案 1 :(得分:0)

案例2:

因为,在搜索bab之后,它不会考虑已经搜索过的字符(在这种情况下,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)