0

パターンに一致する単純な正規表現を使用しようとしていますが、予期しない結果が得られます...

検索パターンと結果を以下に示します。

public class Test {

    public static void main(String[] args) throws IOException {
        Pattern p = Pattern.compile(".*xx");
        Matcher m = p.matcher("yyxxxyxx");
        while (m.find()){
            System.out.println("match start");
            System.out.println("Start = " + m.start());
            System.out.println("End = " + m.end());
            System.out.println("Group = " + m.group());

        }

    }
}

結果:

match start
Start = 0
End = 8
Group = yyxxxyxx

期待される結果:

match start
Start = 0
End = 4
Group = yyxx
match start
Start = 4
End = 8
Group = xyxx

誰かが正規表現の動作を説明できますか?

4

2 に答える 2

1

貪欲とは、グループ全体を見つけたと判断する前に、可能な限り先に進むことを意味します。あなたの正規表現は基本的に「「xx」で終わる任意の数の文字」と言っています。文字列全体がその説明に一致するため、文字列全体をグループとして取得します。

おそらく、貪欲なマッチャーではなく、遅延マッチャーを使用するつもりでしたか?

于 2013-09-30T02:31:31.560 に答える