2010-02-01 6 views
24

Ich verstehe nicht, was hier vorgeht. Wie sollte ich gsub füttern, um die Zeichenfolge "Yaho \ 'o" zu erhalten?Ruby gsub entgeht nicht einfachen Anführungszeichen

>> "Yaho'o".gsub("Y", "\\Y") 
=> "\\Yaho'o" 
>> "Yaho'o".gsub("'", "\\'") 
=> "Yahooo" 
+1

Dies ist eine der seltsamen Dinge, die ich gesehen habe. –

Antwort

27

\ 'bedeutet $' was alles nach dem Spiel ist. Flucht wieder die \ und es funktioniert wird dies

"Yaho'o".gsub("'", "\\\\'") 
+5

Rubin 1.9.3 '" Yaho'o ".gsub (" '"," \\\\' ") =>" Yaho \\ 'o "' –

+1

funktioniert nicht .... Siehe obigen Kommentar – theSociableme

+2

@AdrienSchuler Es funktioniert, IRB zeigt einen doppelten Backslash, so dass Sie sehen können, dass es ausgeblendet ist. '" Yaho'o ".gsub (" '"," \\\\' "). Length => 7' –

2
"Yaho'o".gsub("'", "\\\\'") 

Da Sie die Escape-Zeichen sowie Flucht aus dem Apostroph sind entkommen.

1

es auch, und es ist ein bisschen besser lesbar:

def escape_single_quotes(str) 
    str.gsub(/'/) { |x| "\\#{x}" } 
end 

Wenn Sie sowohl ein einfaches Anführungszeichen und einen Backslash entkommen wollen, so dass Sie diese Zeichenfolge in eine Ruby-Zeichenfolge mit einem doppelten Anführungszeichen einbetten können, dann wird das folgende für Sie tun:

+0

Ich habe die oberste verwendet, und es hat perfekt funktioniert. genau was ich brauchte. – nfriend21