gaggitのブログ

コーディング、ガジェット、TIPS関連、FX

正規表現技術入門 本レビュー

ここ10日間ほど、「正規表現技術入門」を読んでいました。技術評論社から2015年5月15日に発行された技術本です。著者の一人には、ルビーに実装されている正規表現のライブラリ(鬼雲)を作成した高田謙氏です。この本は、1年前に、見た覚えがあるのですが、その時には、目次を見て正規表現の歴史、最新エンジンの実装に大半のページが割かれており、うーんちょっと興味がないなーと、思ってました。ですが、改めて手に取って読んでみると、1章に正規表現の基本として、コンパクトにかつ、しっかりまとめられていて、正規表現は、連接、選択、繰り返しからなる3項演算子かくかくしかじかと始まり、量指定子、キャプチャと変換など、懇切丁寧に解説しています。もちろん実用的にも、言語(PerlRubyJavaScriptPythonJava)別に対応表と機能、構文のサポートの違いも記述されているので、複数の言語で正規表現を扱うのに重宝しそうです。個人的には、いつもよく忘れてしまう量指定子の違いも解説されています。

例えば、*,*?,*+は、どれも0回以上の繰り返しを表しますが、意味合いが全く異なります。それぞれ、欲張りな量指定子、控えめな量指定子、強欲な量指定子を意味しますが、マッチングの度合いが違ってきます。aaaaを欲張りな量指定子(a*)で検索すると、最大にマッチングしようとするので、aaaaが返ってきますが、控えめな量指定子(a*?)として、検索すると""が返ってきます。控えなので、0回以上の繰り返しを0回として解釈するため。

 本の大部分を占めているエンジンの解説ですが、世の中にはDFA型エンジンとVM型エンジンに大別できるそうです。VM型エンジンは、その名の通り、Javaで使用されているVirtual Machineの略ですね。正規表現コマンドを実行すると、構文を解析して、なんと内部でJIT(Just In Time)コンパイルし、正規表現の演算を高速に結果を出力してくれているそうです。やっぱりエンジンなんて興味がないと言う人も、エンジンを知ることによって、パフォーマンスが上がる正規表現の書き方あるなんて書かれると、ふと読んでみたくなるのではないでしょうか。

 所々に言語学的、数学的な表現がありますが、著者の方が平易な文章と分かりやすく図で表現してくれているので、大変興味深く読ませていただきました。でも、さすがに巻末のAppendixに書かれている部分は、数学的要素がほとんどで、難易度が高いです(^^;。