PHP 4.4.0 および 5.1.0 以降、UTF-8 モードが選択されている場合、一般的な文字タイプと一致させるために 3 つの追加のエスケープ シーケンスが使用されます。
p{xx}
属性xxを持つ文字
P{xx}
属性xxのない文字
X
拡張Unicode文字
上記のxxで表される属性名は、次のように使用されます。 Unicode の一般クラス属性を制限します。 各文字には、2 つの省略文字で指定される、そのような定義プロパティが 1 つあります。 Perl との互換性を保つために、左中括弧 { の後に ^ を追加して否定を示すことができます。たとえば、p{^Lu} は P{Lu} と同等です。
p または P で文字を 1 つだけ指定した場合、この文字で始まるすべてのプロパティが含まれます。 この場合、中括弧のエスケープ シーケンスはオプションです。
p{L}
pL
大文字と小文字を区別しない一致を指定しても、これらのエスケープ シーケンスには影響しません。たとえば、p{Lu} は常に大文字と一致します。
Unicode 文字セットは特定のリテラルで定義されます。これらの文字セットの文字と一致するには、リテラル名を使用します。例:
p{Greek}
P{Han}
決定されたテキストにない場合は、Common に集中されます。
X エスケープは、任意の数の Unicode 文字に一致します。 X は (?>PMpM*) と同等です
つまり、「mark」属性のない文字に一致し、その後に「mark」属性を持つ任意の数の文字が続きます。 そして、このシーケンスを原子のグループとみなします (詳細については以下を参照)。 通常、「mark」属性を持つ文字は、前の文字に影響を与えるアクセントになります。
PCRE は 15000 文字を超えるデータ構造を検索する必要があるため、Unicode 属性を使用して文字を照合するのは高速ではありません。 これが、PCRE で Unicode 属性の代わりに従来のエスケープ シーケンス d、w が使用される理由です。