Заменить "с помощью" в 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("'","\\\\'")
Не очень, но я думаю, что это работает...