正規表現ってナニモノ？

正規表現というと何やら難しそうですが、要するに文字列を指定する方法です。Windowsではファイル名を指定するとき、複数の文字と一致する「*」、任意の1文字と一致する「?」が使えます。例えば、「拡張子がwavのファイル」だったら「*.wav」とするわけです。Windowsでは、この「*」や「?」を「ワイルドカード」と呼んでいます。これを強化したものが正規表現だと考えればいいでしょう。ただし、柔軟な指定が可能な分だけ複雑になっています。

正規表現を覚えるとどんなときに便利なのか、簡単な例を挙げてみましょう。例えば、きれいに整形されてインデントの付いたテキストファイルをHTML化したいとしましょう。そのまま<PRE>タグを使うのも手ですが、やはりちゃんとしたHTMLにするには行頭の空白を削除したうえで単語の途中で改行しないようにする必要があります（たいていのWebブラウザは改行を空白として扱います。単語の途中に空白が入っていると、見た目がよろしくありません）。しかし、段落によってインデント数は違うし、行の途中に空白があるかもしれません。これでは、単純に空白を全部削除するわけにはいきません。しかし正規表現なら、「行の先頭から続く空白」という指定ができるので、これをヌル文字で置き換えれば目的が達成できるわけです。多くのWindowsアプリケーションに実装されている単純な置換コマンドではとてもこうはいきません。

コラム 正規表現とgrepとed 私が正規表現というものに初めてお目にかかったのはgrepコマンドの引数としてでしたが、大本はedあたりのようです。そもそも正規表現は英語で「Regular Expression」と表記し、grepはg/Regular Expression/pというedのコマンドを省略したものですから。



この正規表現は、カーネルの機能ではありません。一応、POSIX 1003.2でBasic Regular ExpressionとExtended Regular Expressionが定義されています。しかし、実際には文字列を扱うのに便利なことからvi、Emacs、sed、awk、Perl、Rubyといった個々のプログラムがそれぞれに実装しているというのが実情です。ライブラリも複数存在しています。Windowsでも秀丸エディタなど、正規表現をサポートしているプログラムがあります。この辺を含めて、プログラムによって細かいところが微妙に違ってきます。これはもうオンラインマニュアルやヘルプを参照しつつ、慣れるしかありません。今回は広く普及している部分を基本に、プログラムによって違う場合には注釈を入れて紹介します。

1|2 次のページへ