12

私はいくつかのjdkコードを見ていました。私はこれらのキャラクターを見つけました。誰かが私にこれらが何を意味するのか説明してもらえますか?

public static String quote(String s) {
    int slashEIndex = s.indexOf("\\E");        // What does this mean. Is this a special char in java. if so what does this do.
    if (slashEIndex == -1)
        return "\\Q" + s + "\\E";          

    StringBuilder sb = new StringBuilder(s.length() * 2);
    sb.append("\\Q");
    slashEIndex = 0;
    int current = 0;
    while ((slashEIndex = s.indexOf("\\E", current)) != -1) {
        sb.append(s.substring(current, slashEIndex));
        current = slashEIndex + 2;
        sb.append("\\E\\\\E\\Q");
    }
    sb.append(s.substring(current, s.length()));
    sb.append("\\E");
    return sb.toString();
}

上記のコード例から、メソッドが\の出現を検出し、それらを\Eと\Qに変換するときに何が起こっているのかを理解することができました。誰かがそれが事実である理由を説明できますか?

このメソッドの詳細については、jdk 1.6のPattern.quote()メソッドを調べていました。

4

3 に答える 3

10

\QJava正規表現エンジンは、との間のすべてのメタ文字の特別な解釈をブロックし\Eます。たとえば[name]、1つの文字(、、、、'n'または)に一致し'a'、6つの文字( 、、、、、、、および)に一致します。詳細については、正規表現チュートリアルの特殊文字のセクションを参照してください。'm''e'\Q[name]\E'[''n''a''m''e'']'

このメソッドは、おそらく外部から提供された(たとえば、ユーザーが入力した)文字列から正規表現を作成します。文字列にはメタ文字が含まれている可能性があるため、このメソッドは文字列全体を\Qとで囲み\Eます。文字列にすでにが含まれている\E場合、メソッドは、引用符の終わり、一致するもの、および見つかっ\Eたそれぞれの新しい引用符の始まりを挿入します。\E

于 2012-08-13T02:30:13.540 に答える
7

\Qつまり、指定された文字列のリテラルパターン文字列を返します\EPattern.quote()

詳細については、次のリンクを参照してください。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html

于 2012-08-13T02:39:33.313 に答える
3

さて、Java正規表現\Qでは特別な意味があります...\E

\Qこのメソッドのほとんどは、引用マーカーと\Eそれ自体を引用するというトリッキーなエッジケースに取り組んでいます。

于 2012-08-13T02:14:46.430 に答える