Ruby Tips!

RubyのTipsを紹介します

特殊文字をバックスラッシュでエスケープする

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\\"