PHP 5.1.0 以降、UTF-8 モード を設定した場合に、 一般的な文字タイプにマッチする新たなエスケープシーケンスが 3 つ追加されました。
ここで xx で表されているプロパティ名は、Unicode で 一般カテゴリプロパティ (general category properties) として規定されているものに なります。すべての文字は、いずれかひとつのプロパティを持ちます。 プロパティは、2 文字の略語で表されます。Perl と同じく、 開き波カッコとプロパティ名との間にハット文字を記述することで否定を指定できます。 たとえば、\p{^Lu} は \P{Lu} と同じです。
\p もしくは \P の後に、一文字だけを記述すると その文字で始まるすべてのプロパティが指定されたことになります。 この場合、否定の指定をしていない場合、波カッコを使用しなくても構いません。 以下の 2 つの例は等価になります。
\p{L} \pL
プロパティ | マッチ | 備考 |
---|---|---|
C | その他 (Other) | |
Cc | コントロール文字 (Control) | |
Cf | 非可視整形用文字 (Format) | |
Cn | 未定義コードポイント (Unassigned) | |
Co | 私的利用領域 (Private use) | |
Cs | サロゲート (Surrogate) | |
L | アルファベット (Letter) | Ll、 Lm、Lo、Lt および Lu を含む |
Ll | 小文字アルファベット (Lower case letter) | |
Lm | 擬似文字 (Modifier letter) | |
Lo | その他の文字 (Other letter) | |
Lt | タイトル文字 (Title case letter) | |
Lu | 大文字アルファベット (Upper case letter) | |
M | 記号 (Mark) | |
Mc | 修飾文字 (Spacing mark) | |
Me | 他の文字を囲むための文字 (Enclosing mark) | |
Mn | 他の文字を修飾するための文字 (Non-spacing mark) | |
N | 数字 (Number) | |
Nd | 10 進数字 (Decimal number) | |
Nl | 数値を表す文字 (Letter number) | |
No | その他の数字 (Other number) | |
P | 句読記号 (Punctuation) | |
Pc | 連結用句読記号 (Connector punctuation) | |
Pd | ダッシュ (Dash punctuation) | |
Pe | 閉じ句読記号 (Close punctuation) | |
Pf | 末尾句読記号 (Final punctuation) | |
Pi | 先頭句読記号 (Initial punctuation) | |
Po | その他の句読記号 (Other punctuation) | |
Ps | 開き句読記号 (Open punctuation) | |
S | 記号 (Symbol) | |
Sc | 通貨記号 (Currency symbol) | |
Sk | 合わせ文字 (Modifier symbol) | |
Sm | 数学記号 (Mathematical symbol) | |
So | その他の記号 (Other symbol) | |
Z | 区切り文字 (Separator) | |
Zl | 行区切り文字 (Line separator) | |
Zp | 段落区切り文字 (Paragraph separator) | |
Zs | 空白文字 (Space separator) |
"Greek" や "InMusicalSymbols" といった拡張プロパティ (extended properties) は PCRE によりサポートされていません。
大小文字を区別しないマッチングを設定していても、これらのエスケープ シーケンスには影響しません。たとえば、\p{Lu} は 常に大文字にのみマッチします。
\X は、拡張 Unicode シーケンスを構成する Unicode 文字群に マッチします。\X は、(?>\PM\pM*) と等価です。
つまり、記号 (mark) プロパティの付いていない文字と、その後に続く 0 以上の 記号プロパティ付きの文字にマッチし、その並びをアトミック (atomic) な まとまりとして取り扱います。記号プロパティ付きの文字とは、アクセント記号などの 直前の文字に対して影響するようなもののことです。
Unicode プロパティを使った文字列マッチングは速くありません。PCRE は 15,000 以上のデータからなるストラクチャを検索する必要が有るためです。 そのため、PCRE では、\d や \w といった 以前から有るエスケープシーケンスは Unicode プロパティを使用しないように なっています。