何にもマッチしない正規表現

タイトルの "何にもマッチしない正規表現" とは、文字通り、どんな入力を与えてもマッチしない正規表現を指します。

例えば以下のようなものがそれにあたります。

 /$^/
 /(?!)/
 /^(?!.)./
 /^(?!)/
 /$./

いずれも、どんな入力をもらってもマッチしません。*1

人生において何にもマッチしない正規表現を書くことは少ないとは思いますが*2、たとえば、正規表現による除外しかうけつけないような、へぼいフィルタリングシステムがある場合、何にもマッチしない正規表現を使うことにより、何も除外しないことができます。

<!-- 除外対象をなくせるよ! -->
<poor_filtering exclude="$^" />

………べ、便利ですね!

で、いくつか何にもマッチしない正規表現のパターンがあるなら、どれが一番はやいのかな?と思って、CoffeeScript書いてみました。

http://jsfiddle.net/kU2jj/1/

速度的には↓のようになるようです。(Chrome 33.0.1750.154 mでテスト)

/// 同じぐらいの速度。(ほとんど時間かからない)
/$^/
/^(?!.)./
/^(?!)/

/// 文字列の長さnに比例してO(n)で遅くなる (文字列先頭からマッチングを試行している??)
/$./
/(?!.)./
/(?!)/

正規表現エンジンの実装によって結果はわりとかわるでしょう。

現実問題、遅い方を使ったとして何か問題になるようなことなんてないと思うんですけど、個人的には$^がスマートかなあと思いました。

(?!)もかっこいいと思うんですけどね!

*1:厳密にいうと、マルチラインモードな場合、複数行テキストをもらうと$は違う挙動をする環境もあると思います。

*2:そもそも人生において正規表現を書く人間の方が少ないという冷静なツッコミはNG