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
Es bekommt Kinder \\ 's Welt. – Jirapong
Nein, tut es nicht. – Magnar
@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