2010-02-01 8 views
24

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" 
+1

Ceci est l'une des choses les plus bizarres que j'ai vu. –

Répondre

27

\ 'signifie $' qui est tout ce qui suit la correspondance. Escape the \ encore une fois et il fonctionne

"Yaho'o".gsub("'", "\\\\'") 
+5

ruby ​​1.9.3 '" Yaho'o ".gsub (" '"," \\\\' ") =>" Yaho \\ 'o "' –

+1

Ne fonctionne pas .... Voir ci-dessus commentaire – theSociableme

+2

@AdrienSchuler Cela fonctionne, IRB affiche une double barre oblique inverse afin que vous puissiez voir qu'il est échappé. '' Yaho'o ".gsub (" '"," \\\\' "). Length => 7' –

2
"Yaho'o".gsub("'", "\\\\'") 

Parce que vous échapper le caractère d'échappement, ainsi que d'échapper à la seule citation.

1

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 
+0

J'ai utilisé le top, et cela a parfaitement fonctionné. exactement ce dont j'avais besoin. – nfriend21

Questions connexes