2011-06-27 4 views
4

Je travaille dans Ruby et j'essaie d'échapper ' caractères à \' afin que je puisse les utiliser en SQL. J'essaie d'utiliser gsub, mais cela ne semble pas fonctionner.Échapper Apostrophes en utilisant Gsub

"this doesn't work".gsub /'/, '\\'' #=> "this doesnt workt work" 
"this doesn't work".gsub /'/, '\\\'' #=> "this doesnt workt work" 
"this doesn't work".gsub /'/, '\\\\'' #=> "this doesn\\'t work" 
"this doesn't work".gsub /'/, '\\\\\'' #=> "this doesn\\'t work" 

Je ne sais pas si gsub est encore la bonne méthode pour être en utilisant, donc je suis prêt à essayer presque tout ce qui obtient les résultats que je suis à la recherche.

+2

Ne vous arrêtez pas à quatre heures. Allez cinq. En fait, quatre devraient retourner un Notez également que pour que ruby ​​affiche (inspecte) le résultat entre guillemets, il va s'échapper d'une barre oblique inversée Vous ne remarquerez peut-être pas que vous l'avez déjà obtenu – sawa

+0

@sawa Merci, vous avez raison, je n'ai pas Je ne remarque même pas que j'ai bien compris –

Répondre

3

Quelqu'un d'autre a eu ce même problème, en raison d'une signification/interprétation spéciale dans l'expression rationnelle de Ruby.

\ 'signifie $' ce qui est tout après la correspondance. Escape the \ à nouveau et il fonctionne

Voir this answer.

Est-ce que cela fonctionne?

"this doesn't work".gsub /'/, '\\\\\'' => "this doesn\\'t work" 
+1

Le problème avec cette solution est qu'elle double le '' 'à' \\ ''. Je cherche un'.' –

+0

Oh, je vois. Une seconde ... – jefflunt

+1

'gsub/'/,' \\\\\ '' ' – sawa

0

Vous devez échapper le \ et le '. Lorsque vous avez besoin »dans le résultat, pourquoi ne pas définir le résultat avec"

puts "this doesn't work".gsub /'/, "\\\\'" #=> "this doesn\'t work" 

\ doivent être échappées de toute façon.

Questions connexes