正規表現

 正規表現とは、文字列検索に使われる特殊な表現のことです。

 いろいろ説明するより例を見た方が早いと思うので1つ例を挙げてみましょう。

C[A-Za-z]*

 これは、「'C' で始まって、そのあとにアルファベット0文字以上続く文字列」を表現しています。つまり、これで検索をかけると CTestChangeToShohwaC などが引っかかるわけです。

 なるべくクラス名にのみ引っかかるようにしたければ、

C[A-Z][a-z]+

というようにすればいいでしょう。これは「'C' で始まって、そのあとに大文字のアルファベットが1文字続き、そして小文字のアルファベット1文字以上続く文字列」を表現しています。

 このように、特殊な記号を使って文字列を一般的に表現したものが正規表現なわけです。第3部第23章のマッチ関数でやったことをより発展させたものなわけです。


 以下に正規表現の一覧を示します。このCGIは perl で作っているので、perl で使用できる正規表現と同じです。

正規表現 表現するもの
A A という文字そのものです。
A* A が0個以上続いたものです。""、"A", "AA", "AAA", ... というものを表現します。
A+ A が1個以上続いたものです。"A", "AA", "AAA", ... というものを表現します。
ABC+ AB のあとに C が1個以上続いたものです。"ABC", "ABCC", "ABCCC", ... というものを表現します。このように、* や + は直前の1文字にしか作用しません。
(ABC)+ ABC が1個以上続いたものです。"ABC", "ABCABC", "ABCABCABC", ... というものを表現します。このように、カッコで囲めば * や + を数文字に対して作用できます。また、全角文字は2文字として扱われるので、全角文字に * や + などをつけたい場合にもカッコをつけます
. 任意の1文字を表現します。.* で0文字以上の任意の文字列を、.+ で1文字以上の任意の文字列を表現できます。
? 任意の0または1文字を表現します。例えば A?A は "AA" も "ABA" も表現できます。
[ABC] ABC の中のどれか1文字です。"A" か "B" か "C" を表現します。
[E-G] E G の中のどれか1文字です。[0-9] で数字を、[A-Z] で大文字のアルファベットを、[a-z] で小文字のアルファベットを、[0-9A-Za-z_] で数字かアルファベットを表現できます。
[^ABC] A, B, C 以外の1文字です。
ABC|DEF|GHI ABC または DEF または GHI を表現します。
\w 半角のアルファベットか数字かアンダーバー '_' を表現します。[_0-9A-Za-z] と同じです。word(語)の w だと思います。
\W \w 以外の文字を表現します。
\d 半角の 0 〜 9 を表現します。[0-9] と同じです。decimal number(十進数)の d だと思います。
\D \d 以外の文字を表現します。
\s 半角空白文字を表現します。space(空白)の s だと思います。特に、この検索コーナーでは空白は区切り文字になってしまうので、これを使わなければ表現できません。全角空白は表現できませんが、特に必要ないでしょう。
\S 空白以外の文字です。

 他にも ^ABC で ABC から始まる列を、ABC$ABC で終わる列を表現できますが、あくまでHTMLソースの検索(タグや改行は消して検索しますが)なので思うように検索が出来るとは限りません。


Last update was done on 2001.7.11