14

'のような引用符を のようなものに置き換える方法を見つけようとしています\'

どうすればいいですか?

私が試してみました

"'".gsub("'","\\'")

しかし、それは空の文字列を与えるだけです。ここで何が間違っていますか?

4

5 に答える 5

29

これはどう

puts "'".gsub("'","\\\\'")
\'

その理由は、gsub(regex)での一致後\'を意味し、そのため、でエスケープする必要があり、明らかにとしてエスケープされ、最終的には。になります。\\'\\\\\\\'

>> "abcd".gsub("a","\\'")
=> "bcdbcd"

aの後のすべてに置き換えられますa

于 2010-02-15T15:01:22.857 に答える
3

$'変数は、一致の右側にある文字列です。置換文字列ではgsub、同じ変数が\'-したがって問題になります。

x = "'foo'"
x.gsub!(/'/, "\\'")
puts x.inspect        # foo'foo

これは機能するはずです:

x = "'foo'"
x.gsub!(/'/, "\\\\'")
puts x.inspect
puts x
于 2010-02-15T15:00:45.933 に答える
0

私が実際に使用した2段階のアプローチ...

BACKSLASH = 92.chr
temp = "'".gsub("'", "¤'")
puts temp.gsub("¤", BACKSLASH)
=> "\'"

明らかにテキストで「¤」が使用されていない場合にのみ機能します...

于 2010-02-15T15:01:27.740 に答える
0

それはバグかもしれません..または、少なくとも、最小の驚きの原則に関する私の考えを壊す何か。

irb(main):039:0> "life's grand".gsub "'", "\\\'"
=> "lifes grands grand"
irb(main):040:0> "life's grand".gsub "'", "\\\\'"
=> "life\\'s grand"
于 2010-02-15T14:53:52.420 に答える
-1

これを行うのはどうですか:

"'".gsub("\\","\\\\\\\\").gsub("'","\\\\'")

綺麗じゃないけど効果あると思う…

于 2010-02-15T14:51:05.050 に答える