3

より大きな正規表現内でリテラル文字列として扱われる文字列を引用したいのですが、その式はPOSIX拡張正規表現形式に準拠している必要があります。

この質問は、この既存の質問と非常に似ていますが、特殊表現とマークPattern.quote()に依存するを使用することを提案しているため、答えが満足できない点が異なります。これらはJava正規表現でサポートされていますが、POSIX拡張形式に準拠していません。\Q\E

たとえば、私はなりたいのですone.twoが、one\.twoではありません\Qone.two\E

4

2 に答える 2

3

多分これらの線に沿った何か:

// untested
String escape(String inString)
{
    StringBuilder builder = new StringBuilder(inString.length() * 2);
    String toBeEscaped = "\\{}()[]*+?.|^$";

    for (int i = 0; i < inString.length(); i++)
    {
        char c = inString.charAt(i);

        if (toBeEscaped.contains(c))
        {
            builder.append('\\');
        }

        builder.append(c);
    }

    return builder.toString();
}
于 2011-03-01T08:50:57.687 に答える
2

ブライアンの答えは次のように簡略化できます

String toBeEscaped = "\\{}()[]*+?.|^$";
return inString.replaceAll("[\\Q" + toBeEscaped + "\\E]", "\\\\$0");

のみでテスト済み"one.two"

于 2011-03-01T11:57:58.260 に答える