'
のような引用符を のようなものに置き換える方法を見つけようとしています\'
。
どうすればいいですか?
私が試してみました
"'".gsub("'","\\'")
しかし、それは空の文字列を与えるだけです。ここで何が間違っていますか?
これはどう
puts "'".gsub("'","\\\\'")
\'
その理由は、gsub(regex)での一致後\'
を意味し、そのため、でエスケープする必要があり、明らかにとしてエスケープされ、最終的には。になります。\\'
\
\\
\\\\'
例
>> "abcd".gsub("a","\\'")
=> "bcdbcd"
a
の後のすべてに置き換えられますa
。
$'
変数は、一致の右側にある文字列です。置換文字列ではgsub
、同じ変数が\'
-したがって問題になります。
x = "'foo'"
x.gsub!(/'/, "\\'")
puts x.inspect # foo'foo
これは機能するはずです:
x = "'foo'"
x.gsub!(/'/, "\\\\'")
puts x.inspect
puts x
私が実際に使用した2段階のアプローチ...
BACKSLASH = 92.chr
temp = "'".gsub("'", "¤'")
puts temp.gsub("¤", BACKSLASH)
=> "\'"
明らかにテキストで「¤」が使用されていない場合にのみ機能します...
それはバグかもしれません..または、少なくとも、最小の驚きの原則に関する私の考えを壊す何か。
irb(main):039:0> "life's grand".gsub "'", "\\\'"
=> "lifes grands grand"
irb(main):040:0> "life's grand".gsub "'", "\\\\'"
=> "life\\'s grand"
これを行うのはどうですか:
"'".gsub("\\","\\\\\\\\").gsub("'","\\\\'")
綺麗じゃないけど効果あると思う…