2011-10-28 16 views
1

私はユーザ指定の文字列を持っています。その文字列をリテラルとして扱う正規表現にする必要があります。最後にあらかじめ書かれた正規表現。ユーザ定義の文字列をリテラル文字列に変換して、定義済みの正規表現を追加します。

本質的に、「ユーザーが提供したもの、このパターンが後に続く」と言う方法。

これは、メタ文字をエスケープするために、ユーザーが指定した文字列をサニタイズする必要があるかもしれないと私に思います。一例として、

が、これは私が

\\ Replace "\" with "\\"
String rE = userText.replaceAll("\\", "\\\\");
\\ Replace . with \.
rE = rE.replaceAll(".", "\\.");

を試みたものですが、これは

Execution aborted because of unhandled exception: 
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 
\ 
^ at java.util.regex.Pattern.error(Pattern.java:1725) 
at java.util.regex.Pattern.compile(Pattern.java:1478) 

をエスケープ\をマッチングがこれを行うための簡単な方法がある場合に、次のメッセージで失敗します?私は潜在的なregExをリテラルにするための組み込みメソッドがあると思うが、見つけられない。

私は同様の質問をしてきましたが、ユーザーの入力文字列をリテラルとして扱いたいと思わない人はいません。

答えて

5

使用Pattern.quoteリテラルパターンとしてユーザー指定の文字列を引用する方法。

+0

*爆発*今、私は馬鹿のように感じる。 –

1

すべてのメタ文字をエスケープするか、エスケープシーケンスをするPattern.quote methodを使用します。

String rE = Pattern.quote("\\"); 

この方法はそれが文字通りのパターンであるかのように文字列sと一致しますPatternを作成するために使用することができますStringを生成。

関連する問題