半年くらい前に自作したスクリプトに組み込んだ処理なのに、どこのサイトでやり方を調べたのか忘れてしまった。たぶん、「Ruby 置換 Hash」とかで調べて、なるほどふむふむと思いながら実装したんだろう、String#gsub(pattern, hash) とすることで複数置換ができる。
str = "first second third" gsubhash = { "first"=>"Mike","second"=>"Johnny","third"=>"Tom" } p str.gsub(Regexp.union(gsubhash.keys), gsubhash) #=> "Mike Johnny Tom"
gsubで置換するところ、正規表現を与えるのに Regexp#union とすればよいのだと、調べる過程で初めて知った。自分が当初書いていたスクリプトでは、Array#join を使ってなんか無理矢理感を出していた。
p str.gsub(/#{gsubhash.keys.join('|')}/, gsubhash)