Я пытаюсь понять, как заменить цитату вроде ' чем-то вроде \'.
Как мне это сделать?
Я пробовал
"'".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
Это может быть ошибка. Или, по крайней мере, что-то, что нарушает мою идею принципа наименьшего удивления.