今月の Software Design : 2013/05 (その3)

 「今月の Software Design 」の5月号の投稿の第3回目です。

 今回は第二特集の「正規表現をマスターしていますか?」についての要約と感想です。

 それでは以下のフォーマットで書いてゆきます。

 

○ 記事のタイトル
( 1 行目 ) 記事の要約
( 2 行目以降 ) 感想

 

○ 第二特集:(第二章) 正規表現の落とし穴

 正規表現を使っていて『何故かうまくマッチしてくれない』といったケースについて、代表的なものを紹介してくれています。具体的には、メタキャラクタ "*" をワイルドカードのそれと思って使ってしまっているケースについてと、シェルがメタキャラクタを解釈してしまうケース、エスケープ文字がごちゃごちゃ入ってくる状況で、正しくエスケープが行われていないケース、vi/vim のグループ化のメタキャラクタを例に、コマンドによってメタキャラクタが違うケース、そして任意文字を指定するメタキャラクタ "[]" において、範囲指定が正しく行われいないケースについて紹介しています。

 

○ 第二特集:(第三章) プログラミングでも威力を発揮する正規表現

 プログラムで正規表現を使うケースについて、JavaScript を例に解説しています。まず JavaScript における正規表現を使うためのシンタックスについてと、Perl 互換の正規表現 (PCRE: Perl Compatible Regular Expressions) を使うプログラミング言語との違いについて、そして最後に正規表現を使って任意の xml の入力を解析してタグだけ抽出するプログラムを作って、それを紹介しています。

 これまで第一章、第二章、そして第三章の前半とスマートな感じで来たので、最後のタグ抽出プログラムの力技感がハンパないです。例えるならば、のび太とジャイアンがケンカをして、ボコボコにされながらも辛くもジャイアンに勝利して『ほら勝ったぜ』と得意げに言われた時のあの感じです。

 

○ 第二特集:(第四章) 正規表現エンジンの種類としくみ

 正規表現エンジンの仕組みと特性について解説しています。具体的には、正規表現を決定生有限オートマトンに変換して、入力文字列をそこに通して判定する "DFA 型" と、正規表現を命令列に模してプログラムのシュミレーションの要領で入力文字を解釈して判定する "VM 型" について、それらの仕組みと特徴、そして両者の性能特性について解説してくれています。

 凄まじい記事です。書き手の素養とユーモアを感じる書き方で、その上内容も非常に濃く、読みごたえが抜群です。

 たった10ページの内容ですが、何がどうしてそうなるのか、何がダメで何が良いのかがわかり易く伝わってくる非常に参考になる記事です。