つ以上\\
は仕事をしていません:
scala> line.replaceAll("\"" , "\\\\\"");
res5: java.lang.String = replace \" quote
ここでの問題は、文字列をエスケープする2つの「レイヤー」があることです。
scala> "\""
res0: java.lang.String = "
scala> "\\"
res1: java.lang.String = \
scala> "\\\""
res2: java.lang.String = \"
scala> val line:String = "replace \" quote";
line: String = replace " quote
第二の層は、正規表現のインタプリタである:第一層は、我々は簡単にREPLで見ることができるコンパイラ、です。これは見にくいですが、あなたの例を適用して見ることができます:
scala> line.replaceAll("\"" , "\\\"");
res5: java.lang.String = replace " quote
どのようなreg。 exp。通訳は実際には\ "を受け取りますが、これは単に"と解釈されます。だから、我々はregが必要です。 exp。 \\受け取るために「コンパイラが私たちを与えるようにするには、\我々は\\書く必要が
のは、アンエスケープ見てみましょう:。
- 右のケースを:\\\」コンパイラが見ている\」、正規表現は\ "を見ます。
- 間違っている場合:\\「コンパイラは\を見て」、正規表現は「見る
それは非常にまっすぐ進むことにもかかわらず、少し混乱することができ
@sschaefで指摘したように、。それは「」使用する」トリプル引用し、この形式の文字列は、コンパイラによってエスケープを解除されていません。
scala> line.replaceAll("\"" , """\\"""");
res6: java.lang.String = replace \" quote
ヴァルupdatedLine = line.replaceAll( "\" " "\\\\\"")私のために働いた(私はいくつかの理由で5つの引用符を必要と)。 –
書かれていました:) – pedrofurla
混乱を避けるために、私は "" ... "の代わりに" "" "を使用することをお勧めします。 – sschaef