2010-02-19 10 views
1

rubis 1.8.6 (2007-09-24 patchlevel 111)Comment échapper des barres obliques dans une chaîne de guillemets simples?

str = '\&123' 
puts "abc".gsub("b", str) => ab123c 
puts "abc".gsub("b", "#{str}") => ab123c 
puts "abc".gsub("b", str.to_s) => ab123c 
puts "abc".gsub("b", '\&123') => ab123c 
puts "abc".gsub("b", "\&123") => a&123c <--- This I want to achieve using temporary variable 

Si je change str = '\&123' à str = "\&123" il fonctionne très bien, mais je reçois str de la fonction match, donc je ne peux pas spécifier manuellement à l'intérieur .. parantheses .. Y at-il un moyen de changer le comportement 'string' à "string" de la chaîne?

+0

(simple) Si vous obtenez de la fonction str match, comment peut-il avoir des citations? Une chaîne de caractères est une chaîne de caractères et cela ne fait pas de différence si elle a été déclarée quelque part en utilisant des guillemets simples, ou quelle que soit son origine. Pourriez-vous reformuler votre question pour réduire le niveau de confusion? – johannes

Répondre

0

simple:

str = '\&123' <-- the result of your match function 
str = str.gsub(/\\/, '\\\\') 

Vous pouvez également jeter un oeil here.

+0

Je reçois l'erreur suivante: option regexp inconnue - g – Stevo

+0

@ stevo84 Vous pouvez omettre l'option 'g', car l'utilisation de' gsub' la rend déjà globale. –

+0

Merci Jimmy. Rubby n'est pas mon premier langage de développement. Je suis plus un gars .NET. –

0

Il suffit de retirer la barre oblique inverse:

puts "abc".gsub("b", '&123') 

Ampersand est pas nécessaire pour être protégé par des guillemets simples backslash à l'intérieur (à la différence entre guillemets).

+0

le seul problème est, je reçois cette chaîne de la fonction match(), et il contient beaucoup d'autres chaînes échappées ainsi (comme c'est un HTML) ... – Stevo

0

peut-être il y a un moyen plus simple, mais le code ci-dessous fonctionne

> str = '\&123' 
> puts "abc".gsub("b", str.gsub(/\\&/o, '\\\\\&\2\1')) 
> => a\&123c 
0

@Valentin

-> Je voulais dire que str de correspondance n'a pas été pris textuellement. Ainsi, une autre solution est apparue, que je ne connaissais pas ....

"abc".gsub("b") { str } -> a\&123c