注意：ここでは正規表現とワイルドカード自体については説明しません。ここで紹介するような間違いに注意して、もう一度検索してください。

「・・・がわかっていない人は、情報関係の本なんて書くべきではない」なんてことを言うと自分に跳ね返ってきそうで怖いのですが、正規表現とワイルドカードの違いがわかっていない人は、お願いですから情報関係の教科書は書かないでください。

計算機概論の講義のネタを集めているときに、「正規表現とワイルドカードをごっちゃにする」というとんでもない間違いが世に蔓延っているのを知りました。影響力の小さいブログとかなら別にいいのですが、情報処理技術者試験の教科書や、IT用語辞典が間違っているのはまずいでしょう。

たとえば、手元にあった『ソフトウェア開発技術者完全教本』には、次のような記述がありました。

正規表現は、特定の文字列ではなく文字列の一部を一般化して表現するための手法。プログラム言語理論の分野において、字句（変数名や予約語、その他の識別子）を一般化して定義するために考案された表現である。 たとえば、文字列検索において、”*”を任意の文字列（空文字も含む）、”?”を任意の1文字として指定できるとすると、検索文字列に”abc*”と指定すると、次のような文字列が検索の対象となる。 abc, abcd, abcded, abcdefghijklmnなど などが検索の対象となる。また、”a?c”と指定した場合は、次のような文字列が検索の対象となる。 abc, aac, axcなど

最初の説明は変ですし、後の例は正規表現ではなくワイルドカードのものです。開いた口がふさがらないというやつです。

もう1冊、『情報処理技術者試験学習書 情報処理技術者』には次のような記述がありました。

文字列に対して、特定の文字（”$”、”*”など）を組み合わせて表現することを正規表現という。この特定の文字を、メタキャラクタという。メタキャラクタは特別な意味を持っている。UnixやWindowsなどでファイルを検索するとき、”*.jpg”と指定すると、拡張子が”jpg”であるファイルが検索される。このときの”*”がメタキャラクタである。

メタメタですね。ちょっとした誤解というわけではなさそうです。

辞典も信用なりません。SL900Xに収録されている情報処理技術者用語辞典によれば、

字句をパターンの集合で表す式で定義する表現方式。（中略）「*」はワイルドカードとして利用される。

されません。正規表現とワイルドカードは違います。なんか、やばいことになってませんか？

ASCIIのデジタル用語辞典(Glossary Help)には、先の『ソフトウェア開発技術者完全教本』とほとんど同じ説明が載ってますね。やれやれ（著作権とかは大丈夫なんでしょうか。ウソを護ってもしょうがないかもしれませんが）。

同じくASCIIのデジタル用語辞典(PC EXPLORER)によれば、

文字列の一部をパターン化して記述する方法。正規表現を用いた検索では、特定の単語そのものだけではなく条件に一致する複数の単語を検索できる。UNIXなどで一般的な文字列検索プログラム「grep」では、キーワード中の「*」を任意の文字列、「？」を任意の1文字として検索できる。

できません。それはワイルドカードです。

教科書も辞典もダメだとすると、学生は何に頼ったらいいんでしょう。

学問の場では批判的に見られることが多いようですが、Wikipediaの説明はけっこういいと思いますよ（同じような話は拙著にも書きましたが）。「Wikipediaは信頼性が・・・」なんて乱暴な言い方はできなくなりますね。

拡張された正規表現には正規言語ではない文字列も表せるものも多く、ゆえに正規表現という名前は実態に即していない面もあるが、伝統的に正規表現と呼ばれ続けている。

正規表現の解説書は、Friedl『詳説 正規表現』（第3版）が定番です（最近、新しい翻訳が出ました）。

言語理論の教科書は、Hopcroft, Ullman, Motwani『オートマトン言語理論 計算論』が定番ですが、Sipser『計算理論の基礎』（原著第2版）という新しい教科書もお薦めです（学生だったときに、これの第1版を読みました。1冊のほうが扱いやすくていいのですが）。

ちゃんと勉強したい学生の皆さんは、定評のある教科書を選ぶと良いでしょう。

追記：だから、正規表現とワイルドカードは違うんだって

お約束ですが、実際にコードを書きながら正規表現を学びたいという方には、拙著『Webアプリケーション構築入門 実践！Webページ制作からマッシュアップまで 』（森北出版, 2011）がおすすめです。