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

ケース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(この場合はインデックス3のb)を考慮しないため、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 に答える