2010-02-01 3 views
24

Non capisco cosa sta succedendo qui. Come dovrei alimentare gsub per ottenere la stringa "Yaho \ 'o"?Ruby gsub non sfugge alle virgolette singole

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

Questa è una delle cose più bizzarre che ho visto. –

risposta

27

\ 'significa $' che è tutto dopo la partita. fuggire di nuovo la \ e funziona

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

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

+1

NON FUNZIONA .... Vedere sopra commento – theSociableme

+2

@AdrienSchuler Funziona, IRB visualizza una doppia barra rovesciata in modo da poter vedere che è sfuggito. '" Yaho'o ".gsub (" '"," \\\\' "). Length => 7' –

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

Perché si sta sfuggire il carattere di escape così come sfuggire alla sola offerta.

1

Questo sarà anche farlo, ed è un po 'più leggibile:

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

Se si vuole sfuggire sia un single-preventivo e una barra rovesciata, in modo che è possibile incorporare quella stringa in una stringa rubino doppia citazione, quindi il seguente lo farà per voi:

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

Ho usato quello superiore e ha funzionato perfettamente. esattamente quello di cui avevo bisogno – nfriend21