2009-04-04 6 views

Antwort

1

Ihr Problem ist, dass die Zeichenfolge "\ '" für Gsub in einer Ersatzzeichenfolge sinnvoll ist. Damit es so funktioniert, wie Sie möchten, müssen Sie das Block-Formular verwenden.

s.gsub("'") {"\\'"} 
4
>> puts s.gsub("'", "\\\\'") 
children\'s world 
+1

Es bekommt Kinder \\ 's Welt. – Jirapong

+0

Nein, tut es nicht. – Magnar

+5

@Jirapong Der Grund, warum Sie denken, es wird \\ ist, weil die Rails-Konsole die Zeichenfolge nicht anzeigt, sondern zeigt, wie man die Zeichenfolge erstellen würde. Wenn Sie also "\\" eingeben, wird das Ereignis "\\" angezeigt, obwohl es sich um eine Zeichenfolge mit einem einzelnen umgekehrten Schrägstrich handelt. Um herauszufinden, was wirklich in der Zeichenfolge ist, sollten Sie ** puts ** verwenden. Zum Beispiel zeigt puts "\\" einen einzelnen Backslash. – Brian

11

von ruby-doc.org über das Ersetzungsmuster für gsub:

die Sequenzen \ 1 \ 2, und so weiter verwendet werden kann, aufeinanderfolgenden Gruppen in dem Spiel

zu interpolieren,

Dies beinhaltet die Sequenz \', was bedeutet "alles was ich anpasst".

Entweder "\\'" oder '\\\'' werden beide produzieren \' (denken Sie daran, dass \ in beiden Doppel und einzelnen Strings in Anführungszeichen entgangen werden muss, und dass ' hat in einfachen Anführungszeichen maskiert werden, so Apostrophe in dieser mit Fall macht tatsächlich Dinge mehr ausführlich). Z.B .:

puts "before*after".gsub("*", "\\'") 
"beforeafterafter" 

puts "before*after".gsub("*", '\\\'') 
"beforeafterafter" 

Was Sie gsub dann sehen wollen, ist eigentlich \\', die beide erzeugt werden kann durch "\\\\'" und '\\\\\''. Also:

puts s.gsub("'", "\\\\'") 
children\'s world 

puts s.gsub("'", '\\\\\'') 
children\'s world 

oder wenn Sie viel mit \ zu tun haben, könnten Sie nutzen die Tatsache, dass, wenn Sie /.../ (oder %r{...}) Sie nicht über die Schrägstriche verdoppeln-entkommen:

puts s.gsub("'", /\\'/.source) 
children\'s world 
Verwandte Themen