こんなんでもいいんでは?

class Hoge
  def initialize(hash)
    @table = hash
  end

  def [](str)
    @table.each_pair{|reg, val|
      return val if reg =~ str
    }
    return nil
  end
end

foo = Hoge.new({/f.*/ => "Foo", /fo.*/ => "ふ〜", /b.*/ => "Bar"})
p foo["a"]
p foo["b"]
p foo["f"]
p foo["fooooo"] # /f.*/, /fo.*/ でマッチ

複数の hash のキーになってる正規表現の表す範囲は重複しないと仮定。