文字クラス (角括弧)
左角括弧は文字クラスの説明を開始し、角括弧で終わります。 単一の右角括弧には特別な意味はありません。文字クラスのメンバーとして右角括弧が必要な場合は、文字クラスの最初の文字 (^ を使用して否定する場合は 2 番目の文字) に記述するか、エスケープ文字を使用できます。
文字クラスはターゲット文字列内の単一の文字と一致します。文字クラスを否定するために ^ が使用されない限り、その文字は文字クラスで定義された文字セットの 1 つである必要があります。 ^ を文字クラスのメンバーにする必要がある場合は、それが文字クラスの最初の文字でないことを確認するか、単にエスケープしてください。
たとえば、文字クラス [aeiou] はすべての小文字の母音文字と一致し、[^aeiou] はすべての非母音文字と一致します。注: ^ は、文字クラスに存在しない文字を列挙によって指定するための単なる便宜記号です。アサートする代わりに、ターゲット文字列から 1 文字を消費し、現在の一致ポイントがターゲット文字列の末尾にある場合、一致は失敗します。
大文字と小文字を区別しないマッチングが設定されている場合、文字クラスは大文字と小文字の両方のバージョンを表すため、たとえば、大文字と小文字を区別しない [aeiou] は「A」と「a」の両方に一致し、大文字と小文字のバージョンは区別されません[^aeiou] も「A」とは一致しません。
改行文字は文字クラスでは特別な意味を持たず、PCRE_DOTALL または PCRE_MULTILINE オプションとは何の関係もありません。 [^a] などの文字クラスは常に改行文字と一致します。
文字クラスでは、ダッシュ (マイナス記号 -) を使用して、ある文字から別の文字までの範囲を指定できます。 たとえば、[d-m] は d と m の間のすべての文字に一致し、このセットは閉じられます。 アンダースコア自体を文字クラスに記述する場合は、アンダースコアをシフトするか、範囲として解釈されない位置 (通常は文字クラスの先頭または末尾) に表示する必要があります。
文字範囲の説明の後に右括弧を使用することはできません。 たとえば、パターン [W-]46] は、W と - の後に文字列 "46]" が続く文字クラスとして解釈されるため、"W46]" または "-46]" と一致します。ただし、括弧がエスケープされている場合は、範囲の終わりとして解釈されるため、[W-]46] は、W から ] の範囲内のすべての文字に加えて、文字 4 と 6 の種類を含む 1 つとして解釈されます。 8 進数または 16 進数の記述内の角括弧は、範囲を終了するために使用することもできます。
範囲演算は ASCII 順にソートされます。これらは、[ などの文字に数値を割り当てるために使用できます。