特殊文字をバックスラッシュでエスケープする
String#gsub
を使えば特殊文字をバックスラッシュでエスケープする処理を簡単に記述できる。
p "foo'bar\"buz\\".gsub(/['"\\]/){|c| "\\" + c} #=> "foo\\'bar\\\"buz\\\\"
ポイントはブロック付きでString#gsub
を呼び出すこと。引数を2つ取るgsubでは置換文字列中の/
が部分文字列との置き換えという特別な意味を持つため、2重のエスケープが必要になり厄介だ。
エスケープした文字列をアンエスケープする処理は、同様にString#gusb
を使って以下のように記述できる。
p "foo\\'bar\\\"buz\\\\".gsub(/\\(.)/){ $1 } #=> "foo'bar\"buz\\"