Regexp.compileはエスケープまではしてくれないのね…

久々にRubyを書いていてハマった。

date = "2007/04/13 12:00:00 +9:00"
  #=> "2007/04/13 12:00:00 +9:00"

%r{#{date}}.match date
  #=> nil

%r{#{Regexp.escape(date)}}.match date
  #=> #<MatchData:0x10844bc>

%r{#{date}}
  #=> /2007\/04\/13 12:00:00 +9:00/

どうやらスラッシュはエスケープしてくれるので全部エスケープしてくれるものと勘違いしていた模様。Regexp.compileで標準でRegexp.escapeまで書けてくれてもいい気がする。