2011-01-24 24 views
6
strOutput.replace("/{{[^]*?}}/g",""); 

JavaScriptの正規表現をJavaで安全な正規表現に変換する方法はありますか?どのように安全なJava正規表現にjavascriptの正規表現を変換するには?

上記の文は私にエラーを与える:

Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\)

私は正規表現を持つすべてのこと慣れていないので、私はいくつかのガイダンスを使用することができます。

ありがとうございます!

+1

作成したJavaを投稿できますか?エラーが発生しましたか? –

答えて

11

スラッシュを取り除いてください。あなたはJavaでそれらを必要としません。また、正規表現のJavaの風味は/g/iのようなスイッチを認識しません。それらはjava.util.regex.Patternの定数で制御されます。

Javaの世界で意味をなさないJavascript正規表現スイッチは、/i/mです。これらはPattern.CASE_INSENSITIVEPattern.MULTILINEにマップされています(Patternクラスから正規表現を作成する際にこれらのスイッチを使用することも、インラインで使用することもできます - 後で説明します)。

/gはマップされませんが、String.replaceAllString.replaceFirstを使用して置換動作を制御できます。

が動作するようにコードを取得するには、このような何かをする必要があると思います:

strOutput.replaceAll("{{[^]*?}}", ""); 

あなたはスイッチを使用したい場合は、正規表現の先頭によう(?i)を何かを追加行う必要があります。

String.replaceを使用することはできません。第1引数にはCharSequenceが入り、正規表現ではないからです。

また、Stringクラスが提供する「クイック正規表現」のメソッドは、期待通りに機能しない可能性があります。これは、たとえばmatchesの正規表現としてパターン(abcとしましょう)を指定すると、Javaが認識する実際のパターンは^abc$になるからです。したがってabcは一致しますが、bcは一致しません。

さらに詳しい情報がありますhereです。

0

/さん(引用符ではなくインライン宣言のためにjavascriptで使用されるもの)(開始と終了のスラッシュはスラッシュ)は必要ありません。

はちょうど

1

Regex r = new Regex("{{[^]*?}}");を開始し、正規表現の末尾に"/""/g"を取り除くであるべき。次に、"\"のようにすべてのものをエスケープする必要があります。"\\"

"g"部分はグローバルを意味します。これは正規表現文字列ではなく、Javaで正規表現をどのように使用するかによって制御されます。