正規表現
正規表現というものが、コンピューターにはあります。英語では、Regular Expression というものです。文字列のパターンマッチングに使われる表記なのですが、前からこの日本語訳がちょっとわかりにくいなと思います。「通常の表現」や「パターン表現」という方がいいかなと、正規表現を英語にそのまま訳すと、Normal Expression と言いそうな気がします。Normal というのは正常や正規のという意味で、正しいというような意味が含まれる気がするからです。この正規表現どんなときに使われるかというと、文書の中から特定の言葉を検索するときです。パソコンでファイルの一覧を表示するときに(最近はあまりやらないのかもしれませんが)、dir *.doc とすると、*はどんな文字が入ってよくて、最後が.docとなっているファイルの一覧が表示されます。それをもっと高機能にしたようなものです。*, ?, [, ^, $, -, \ などの記号をメタ文字といって特別な表現をさせて普通の文字と組み合わせて、任意の(あいまいな)文字列を探すものです。内容については言語の一種類といってもよく、分厚い本が一冊かけるぐらいですから触れないでおきます。詳説 正規表現 第3版こちらのページにわかりやすく書いてあります。サルにもわかる正規表現入門http://www.mnet.ne.jp/~nakama/ところでこの正規表現はとてもすぐれていて、スクレイピングのアセンブリ言語(機械語)といってもいいのです。スクレイピングでは、Webページの内容を取り込んでそのHTMLを分析します。そのHTMLを正規表現で検索するのが一番スピードが速いからです。しかしHTMLの構造(DOM)を解析するわけでは使えないので、アセンブリ言語のようです。ただ、正規表現には一つ困った性質があります。一致するパターンのなかで最大のものを取り出すという性質です。パターンの中を配列として取り出したり、最初のものを取り出して次のものを取り出したりできるといいなといつも思います。書いていて、支離滅裂になっていましたが、実は後者のライブラリを作ろうとしていて中途半端になっていたのを思い出しました。最近仕事で正規表現を使うことがあったので、ライブラリを完成させておけばもっと簡単に済んだのにとちょっと残念に思っていました。ノウハウは役立ちましたが。