2012-08-13 3 views
7

私はいくつかのjdkコードを見ていました。私はこれらの文字を見つけた。誰かが私にこれらの意味を説明することができますか?Javaではこれらの特殊文字は何を意味しますか?

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を\に変換し法のように、私は何が起こっているのかを把握することができた上記のコード例から。誰かがそれがなぜその理由であるか説明できますか?この方法の詳細については、コンテキスト

は、私が1.6 JDK

+0

このコードは、[Javaソースからまっすぐ持ち上げる]ているように見えます/util/regex/Pattern.java.html)( 'Pattern.java'、行1276..1293)。 – dasblinkenlight

+0

はい、jdkソースからです。Pattern.java – JourneyMan

答えて

1

\Q\Eを引用、\Eの試合、それが見つかった各\Eのための新たな引用符の始まりの終わりを挿入しますつまりは、指定されたStringのリテラルパターンStringを返します。詳細については

このリンクを参照してください。http://www.docjar.com/html/api/java(

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

2

からPattern.quote()メソッドに探していたまあ、\Q\Eは、Java regular expressionsで特別な意味を持っている...

のほとんどはこの方法は、引用符\Q\Eを引用するトリッキーエッジのケースで作業しています。

4

Java正規表現エンジンブロック\Q\Eの間のすべてのメタ文字の特殊な解釈をブロックします。 '[''n''a''m''e'、及び']'から\Q[name]\Eは、6つの文字にマッチしながら、例えば、[name]は、単一文字('n''a''m'、又は'e')と一致します。詳細については、regex tutorial特殊文字セクションを参照してください。

このメソッドは、おそらく外部から提供される(ユーザーが入力した)文字列から正規表現を作成します。文字列にはメタ文字が含まれることがあるので、このメソッドは文字列全体を\Q\Eに囲みます。文字列がすでに\Eが含まれている場合は、この方法では、Pattern.quote()がするまさに..です

関連する問題