grepの話
正規表現によるパターンマッチングは、UNIX/Plan9プログラミング環境に浸透している。正規表現ツールとしてもっとも有名なのはgrepだが、UNIXにはegrep、fgrep、zgrepなどの派生コマンドがある。*1一方、Plan9に存在するのは、grep(1)だけで、拡張正規表現、UTF-8をサポートしている。古典的な拡張正規表現しかサポートしていないので、Perl互換正規表現(PCRE)にあるような、\d\D\s\S\w\Wなどはサポートしてない。実装したのはKen Thompsonだが、彼は今まで何回grepを書いているんでしょうねぇ。
正規表現エンジンの実装は、DFA(決定性有限オートマトン)とNFA(非決定性有限オートマトン)を用いた方法に分けることができる。egrepやPlan9のgrepはDFAベースである。GNU grepは、前方参照がない場合はDFA、ある場合はNFAと使い分けをするようだ。
grep、正規表現の実装に興味があれば、次のページがポインタになるでしょう。
「プログラミング作法」を読み返してみるかなぁ。100行もないgrepのサブセットの実装例が説明されている。
- 作者: ブライアンカーニハン,ロブパイク,Brian Kernighan,Rob Pike,福崎俊博
- 出版社/メーカー: アスキー
- 発売日: 2000/11
- メディア: 単行本
- 購入: 58人 クリック: 1,152回
- この商品を含むブログ (209件) を見る
(追記:2008-02-09) O'ReillyのBeautiful codeが翻訳されるらしい。
- 正規表現マッチャ (カーニハンが書いた第1章のサンプルPDF)