Ruby Gsub не избежать одиночных кавычек - PullRequest
25 голосов
/ 02 февраля 2010

Я не понимаю, что здесь происходит. Как мне кормить gsub чтобы получить строку "Yaho \ 'o"?

>> "Yaho'o".gsub("Y", "\\Y")
=> "\\Yaho'o"
>> "Yaho'o".gsub("'", "\\'")
=> "Yahooo"

Ответы [ 3 ]

29 голосов
/ 02 февраля 2010

\ 'означает $', что является всем после матча. Сбежать \ снова, и это работает

"Yaho'o".gsub("'", "\\\\'")
2 голосов
/ 02 февраля 2010
"Yaho'o".gsub("'", "\\\\'")

Поскольку вы избегаете escape-символа, а также одиночной кавычки.

1 голос
/ 10 декабря 2015

Это также сделает, и это немного более читабельно:

def escape_single_quotes(str)
  str.gsub(/'/) { |x| "\\#{x}" }
end

Если вы хотите избежать как одинарных кавычек, так и обратной косой черты, чтобы вы могли встроить эту строку в строку в двойных кавычках, то для вас это будет делать следующее:

def escape_single_quotes_and_backslash(str)
  str.gsub(/\\|'/) { |x| "\\#{x}" }
end
...