Je ne comprends pas ce qui se passe ici. Comment dois-je nourrir gsub pour obtenir la chaîne "Yaho \ 'o"?Ruby gsub n'échappe pas aux guillemets simples
>> "Yaho'o".gsub("Y", "\\Y")
=> "\\Yaho'o"
>> "Yaho'o".gsub("'", "\\'")
=> "Yahooo"
Je ne comprends pas ce qui se passe ici. Comment dois-je nourrir gsub pour obtenir la chaîne "Yaho \ 'o"?Ruby gsub n'échappe pas aux guillemets simples
>> "Yaho'o".gsub("Y", "\\Y")
=> "\\Yaho'o"
>> "Yaho'o".gsub("'", "\\'")
=> "Yahooo"
\ 'signifie $' qui est tout ce qui suit la correspondance. Escape the \ encore une fois et il fonctionne
"Yaho'o".gsub("'", "\\\\'")
ruby 1.9.3 '" Yaho'o ".gsub (" '"," \\\\' ") =>" Yaho \\ 'o "' –
Ne fonctionne pas .... Voir ci-dessus commentaire – theSociableme
@AdrienSchuler Cela fonctionne, IRB affiche une double barre oblique inverse afin que vous puissiez voir qu'il est échappé. '' Yaho'o ".gsub (" '"," \\\\' "). Length => 7' –
"Yaho'o".gsub("'", "\\\\'")
Parce que vous échapper le caractère d'échappement, ainsi que d'échapper à la seule citation.
Ce sera également le faire, et il est un peu plus lisible:
def escape_single_quotes(str)
str.gsub(/'/) { |x| "\\#{x}" }
end
Si vous voulez échapper à la fois simple et un antislash, donc que vous pouvez intégrer cette chaîne dans une chaîne Ruby entre guillemets doubles, alors ce qui suit le fera pour vous:
def escape_single_quotes_and_backslash(str)
str.gsub(/\\|'/) { |x| "\\#{x}" }
end
J'ai utilisé le top, et cela a parfaitement fonctionné. exactement ce dont j'avais besoin. – nfriend21
Ceci est l'une des choses les plus bizarres que j'ai vu. –