私はずっと喜んでRegex replaceAllIn
を実行していましたが、replacement
文字列の中に正規表現のようなものがあると問題に遭遇しました。以下にその問題を示します(Scala 2.9.1-1)。簡単な解決策を使用してのアイデアは本当に批判に耐えないので、本当の問題空間がはるかに複雑であることに注意してください(単に避けられ先取りする「あなたがしようとしないのはなぜ...」を:D)置き換え文字列が正規表現のように見える場合、scala regex replaceAllInは置き換えられませんか?
val data = "val re = \"\"\"^[^/]*://[^/]*/[^/]*$\"\"\".r"
val source = """here
LATEX_THING{abc}
there"""
val re = "LATEX_THING\\{abc\\}".r
println(re.replaceAllIn(source, data))
これは、次のエラーを呈する:私はそれはのような単純なものにしたものから、data
を変更した場合は
java.lang.IllegalArgumentException: Illegal group reference
:
val data = "This will work"
そして、すべての罰金を。
replaceAllIn
は何とか2番目の文字列を探していて、最初のREから覚えていたものを参照する別のREとして使用していますが、ドキュメントには何も言いません。
私には何が欠けていますか?
編集:
re.replaceAllIn(source, java.util.regex.Matcher.quoteReplacement(data))
ありがとうございます。 Javaのドキュメントに向かうのは私には起こりませんでした。それは、本当のJavaのコーダーではないということです。問題の 'data'は実際にはScalaのソースファイルから来ています。あなたが持っているものを正確に知っていないかぎり、 '$'を '$ $ 'に置き換えて最初に前処理して、それをあなたが望むように処理するという経験則があると思います。 –