正規表現の詳細仕様(DFAエンジン)

 ここでは、構文カラー強調表示で使う正規表現の仕様について説明します。 この仕様の正規表現は、特別にDFAエンジンで検索されるものです。 そのため、NFAエンジン用の正規表現の仕様よりは、 かなり制限されています。( ⇒補説


 この正規表現には、次のメタ文字があります。
   [ ] \ . + * ? ( ) |

これらのメタ文字の機能は、NFAエンジン用の正規表現の場合と 基本的に同じです。但し、\ は、エスケープ文字にしか使いません。 また、そのエスケープ文字の種類も少なくなっています。 次に、各メタ文字の機能について、説明します。


記号説明
[ ] これは、次のどちらかの文字集合を表わします。
 (A)この文字集合に属する文字のうちの1字に一致
 (B)この文字集合に属する文字以外の任意の1字に一致
この両者は、この括弧内の最初に ^ の文字があるかないかで区別されます。 ^ がない場合は(A)で、ある場合は(B)です。
この文字集合内の要素の書き方には、次の2種類があります。
文字の範囲を指定する場合:
 その範囲の最初の文字と最後の文字の間に - を入れて書きます。 例えば、[A-Z] は、A, B, C, ... Z に一致します。一方、[^A-Z] は、 A, B, C, ... Z 以外の1字に一致します。
各文字を列挙する場合:
 例えば、[ABC] と書きます。これは、A か B か C にだけ一致します。 一方、[^ABC] は、A, B, C 以外の任意の1字に一致します。 また、この場合、エスケープ文字(下記参照)も使えます。例えば、 [\t\n] は、TAB コードか改行コードに一致します。 [^\d] は、数字以外の任意の1字に一致します。 なお、この括弧内では、 | . ( ) * + ? のメタ文字は、無効なので、 直接書くことができます。一方、 [ ] \ のメタ文字を書くには、それぞれ、 \[ \] \\ とする必要があります。 また、- は上記のように、この括弧内では特別な意味があるので、 - 自身を書くには、\- とする必要があります。 なお、^ は、この括弧内の最初になければ、普通の文字に扱われます。
 この2種類の書き方は、混在させることもできます。例えば、 [abcA-Z] は、小文字の a, b, c または、全ての大文字の英字に一致します。 [ァ-ヶー] は、カタカナと「ー」に一致します。 [ぁ-ん亜-腕々〃] は、ひらかな、JIS 第1水準の漢字、「々」、「〃」 に一致します。 [^a-zXYZ] は、小文字の全英字と大文字の X,Y,Z 以外の任意の1字に一致します。
\ エスケープ文字を、次の表記で表わします。
  \t  水平タブコード( \x09 と同じ)
  \r  キャリッジリターンコード( \x0A と同じ)
  \f  フォームフィードコード( \x0C と同じ)
  \v  垂直タブコード( \x0B と同じ)
  \e  エスケープコード( \x1B と同じ)
  \n  改行コード( CR+LF, LF, CR に一致 )
  \s  空白( 半角空白, \t, \n, \f, \v に一致 )
  \a  英字( [A-Za-z] と同じ )
  \w  単語構成字( [A-Za-z0-9_] と同じ )
  \d  数字( [0-9] と同じ )
  \xnn 2桁の16進文字 nn の値の文字コード
     ( 例えば、\x1B は、ESC コード )
なお、\ の次の英字が上記以外の場合、その英字自身を表わします。 これは、メタ文字を通常文字として表わす場合に使います。 例えば、\\ と \( は、それぞれ、通常文字の \ と ( を表わします。
. 改行以外の任意の1字に一致します。
+ この直前の「単項」※1が1回以上反復するパターンに一致します。 例えば、A+ は、A が1回以上反復するパターン( A, AA, AAA, ... )に一致します。 AB+ は、A の後に B が1回以上反復するパターン( AB, ABB, ABBB, ... )に一致します。 (AB)+ は、AB が1回以上反復するパターン( AB, ABAB, ABABAB, ... )に一致します。 [AB]+ は、A か B が1回以上反復するパターン( A, B, AB, AA, BB, AAB, ABA 等 )に 一致します。
* この直前の「単項」※1が0回以上反復するパターンに一致します。 例えば、AB* は、A の後に B が0回以上反復するパターン( A, AB, ABB, ABBB, ... ) に一致します。なお、この * を使った正規表現は、「空文字」※3 にも一致する場合があるので注意が必要です。例えば、A* は、 「空文字」※3か、A, AA, AAA, ... に一致します。
? この直前の「単項」※1が無いか、または、1つだけ有るパターンに一致します。 例えば、AB? は、A または AB に一致します。また、X?Y は、Y または XY に一致します。 なお、この ? を使った正規表現も、「空文字」※3にも一致する場合がある ので注意が必要です。
( ) この括弧内の正規表現をグループ化して、1つの「単項」※1として扱われる ようにします。例えば、AB+ では、B だけが + の対象ですが、AB を + の対象にするには、 AB をこの括弧で囲って、(AB)+ とします。この括弧は、例えば、 (ABC(XYZ)?)+ のように、入れ子にすることができます。
| この左右にある「複項」※2のうちのどちらかのパターンに一致します。 例えば、abc|xyz は、abc または xyz に一致します。この | は、+ * ? とは 違って、「複項」※2が対象になるため、この例は、 ab(c|x)yz ではなく、(abc)|(xyz) と解釈されます。 ちなみに、CD-player または DVD-player に一致する 正規表現は、CD|DVD-player ではなく、(CD|DVD)-player に なります。あるいは、(C|DV)D-player でも同じです。
 この | を使った正規表現もまた「複項」※2なので、 | の左項または右項になれます。例えば、abc|xyz|\d+ は、 abc または xyz または 1つ以上の数字の並びに一致します。
【補注】
※1「単項」とは、通常文字、エスケープ文字、. の任意文字、 [...] の文字集合、(...) のグループ、のどれかです。
※2「複項」とは、「単項」または「単項」に * + ? を付加したものの 並びです。また、2つの「複項」を | で連結したものも、「複項」になります。
※3「空文字」とは、空集合のようなもので、言わば、空の文字集合です。 「空文字」に一致するということは、検索対象の文字列内の任意の文字位置に 一致するということです。

 この正規表現が検索される際に、その一致部が、次の条件を満たす必要があるかないかも 指定することができます。

この正規表現は、構文カラー強調表示用に特化されているので、これらの条件は、 正規表現の表記で指定するのではなく、当設定用のダイアログボックス内の各チェックボックスで指定します。