Заменить "с помощью" в Ruby?

Я пытаюсь понять, как заменить цитату вроде ' чем-то вроде \'.

Как мне это сделать?

Я пробовал

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

но он просто дает пустую строку. Что я здесь делаю неправильно?

Ответы

Ответ 1

Как насчет этого

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

Причина в том, что \' означает post-match в gsub (regex), и из-за этого его нужно экранировать с помощью \\' и \, очевидно, экранируется как \\, заканчивая \\\\'.

Пример

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

a заменяется всем после a.

Ответ 2

Переменная $' - это строка справа от совпадения. В строке замены gsub одна и та же переменная будет \' - следовательно, проблема.

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

Это должно работать:

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

Ответ 3

Это может быть ошибка. Или, по крайней мере, что-то, что нарушает мою идею принципа наименьшего удивления.

irb(main):039:0> "life grand".gsub "'", "\\\'"
=> "lifes grands grand"
irb(main):040:0> "life grand".gsub "'", "\\\\'"
=> "life\\ grand"

Ответ 4

Двухэтапный подход, который я использовал...

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

Будет работать только в том случае, если в тексте явно не используется "¤"...

Ответ 5

Как это сделать:

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

Не очень, но я думаю, что это работает...