/(?!)/ は「どんな文字列にもマッチしない」パターン

るびま

Regexp.union は Ruby 1.8.1 で追加されたメソッドで、引数がすべて文字列の場合は以下と同じ意味です。

def Regexp.union(*strings)
  return /(?!)/ if strings.empty?
  new(strings.map {|s| escape(s) }.join('|'))
end

例えば Regexp.union('aa', 'bb', 'cc') は文字列 aa か bb か cc にマッチする正規表現を返します。

引数がゼロ個のとき(strings.empty?)にはどういう正規表現が返ってくるのでしょうか。 Regexp.union('aa', 'bb') は aa か bb、Regexp.union('aa') は aa ……と順番に考えてみると、引数がゼロ個のときは「どんな文字列にもマッチしない」パターンが適切であるとわかります。それが /(?!)/ です。

ふむふむ。なるほどー。