Je ne peux pas pour la vie de moi figurer cela, même si cela devrait être très simple.
Comment puis-je remplacer toutes les occurrences de rien ne semble fonctionner: P> < Pré> xxx pré> aucune idée? p> p> "(" code> et ") " code> sur une chaîne avec " \ (" code> et " \ \) " code>? p>
4 Réponses :
dans une chaîne créée avec des guillemets doubles, \ code> échappe au caractère suivant. Donc, afin d'obtenir une barre oblique inverse dans la chaîne, vous devez échapper à la barre oblique inverse elle-même: "\\ (" code>. Ou vous pouvez simplement utiliser une chaîne unique indiquée, qui fait moins de prétraitement: '\ (' code>. p>
Essayez avec: "foo (bar) foo" .gsub ("(", "\\\\\ (") code> fonctionne. Si vous essayez probablement dans la console, vous voyez probablement le \\ ( code> String car la console génère la chaîne avec inspecter, qui échappe à \ p>
met "foo (bar) foo" .gsub ("(", "\\ (") code> et vous verrez p>
Vous avez déjà la solution avec votre deuxième tentative, vous venez d'être confondu car la chaîne est affichée sous forme évasée dans l'interprète interactif. Mais vraiment il n'y a qu'une seule barre oblique inverse il n'y a pas deux. Essayez d'imprimer en utilisant des puts et vous verrez qu'il n'y a qu'une seule barre oblique inverse: Si vous avez besoin d'une conversation plus convaincante, essayez de prendre la longueur de la chaîne: P> > "foo ( bar ) foo".length
=> 15
> "foo ( bar ) foo".gsub("(", "\\(").length
=> 16
Voici ce que je viens de remplacer les deux parents dans un appel: