「正規表現技術入門」はいい本だ
著者の新屋さんから技術評論社の「正規表現技術入門」を頂きました。
これはいい本ですね。特に第2章で語られている、正規表現がどうやって生まれてきたかという話がよいです。僕も拙著「コーディングを支える技術」の続編に向けて、正規表現の歴史を書こうとしたことがあったのですが、僕が書こうと思っていたもの以上によいものに仕上がっています。しかも20ページとコンパクトにまとまってて、もう、僕がこれに関して書く必要はないなぁ、とうれしいようなさみしいような。パイプとgrepの関係は知らなかった、面白い。
第1章で60ページぐらいで正規表現の基本的なことをおさえてくれているのもよいところです。正規表現を使う必要のあるプログラマはみんな第1章だけでも目を通しておくとよいのではないかな。
正規表現がフォーマルにはどう定義されているものなのか。この話題は、コンピュータサイエンスを大学で学んだ人にとっては常識の範疇になるのかもしれません。一方で、ブログで何か書くときには、知っていることを前提としていちいち解説しないで文章を書いてしまったりしがちです。コンピュータサイエンスを学んでない人にとってはミッシングピースなのかもしれませんね。第3章では正規表現のフォーマルな定義の話と、現実的なエンジンの実装とのズレの話が25ページくらいで簡潔におさらいされています。正規表現のエンジンとして決定性有限オートマトン(DFA)の話題が出てくることがピンとこない人は、ぜひこの章を読んでピースを埋めることをおすすめします。
第4章は、DFA型エンジンの詳しい話を30ページ、第5章はVM型エンジンの詳しい話を60ページ、第6章は最新の技術動向を25ページ。ここはまあ、実装に興味があれば。
正規表現の実装に興味がない、単なる正規表現ユーザーであってもぜひ読むとよいのが、第7章「正規表現の落とし穴」 バックトラックによってパフォーマンスが悪化してしまう現象と、それの対処法についての解説。異なる正規表現エンジンの間の違いやマッチ方法の違いについて。最近弊社でもこの落とし穴を踏む事例がありました(遅いッ!遅すぎるッ!Java の正規表現のお話。 | Cybozu Inside Out | サイボウズエンジニアのブログ)どういう問題が起きうるのか知っておくことは多くのエンジニアに有益でしょう。これも25ページくらい。
第8章は、正規表現の限界について。3章のフォーマルな正規表現の話とも若干関連してくるのですが、正規表現には不向きな問題があります。コンピュータサイエンスの分野では、正規表現には向かないようなものに対してどうやって対処するかという研究も長年積み重ねられています。8.3節「構文解析の世界」はわずか10ページでその世界を俯瞰する内容です。
そして付録が…50ページくらいあるのだけど…「正規表現の数学的背景」「正規言語のより高度な数学的背景」…。正規表現の研究者である新屋さんがぶっこんできた超かみごたえのあるスルメのような章だ。ここまでの章を「ふんふん、知ってる知ってる」と余裕で流してきた人でも、この章に入る前には兜のひもを締めなおした方がいいね。戦いがいのある章です。
正規表現技術入門 ――最新エンジン実装と理論的背景 (WEB+DB PRESS plus)
ところで、新屋さんと共著の鈴木さんは共にサイボウズ・ラボユースの1期生ですね。サイボウズがラボユース事業をやることで、彼らが出会うきっかけを作ることができたのだとすれば、やっててよかったなぁという気持ちです。