Свойства Unicode-символов
Начиная с версии 5.1.0, были добавлены три дополнительные управляющие последовательности, совпадающих с некоторыми общими символьными типами в режиме UTF-8. Вот они:
- \p{xx}
- символ со свойством xx
- \P{xx}
- символ без свойства xx
- \X
- расширенная последовательность Unicode
Имена свойств, представленные выше как xx
, ограничены
общими категориями свойств Unicode. Каждый символ имеет ровно одно такое свойство,
указываемое двухбуквенной аббревиатурой. Для совместимости с Perl также можно указать
отрицание добавлением знака "^" между открывающей скобкой и именем свойства.
Например, \p{^Lu}
- это то же самое, что и \P{Lu}
.
Если с \p
или \P
указана только одна буква,
она включает все свойства, которые начинаются с этой буквы.
В этом случае, если не используется отрицание, фигурные скобки необязательны;
следующие два примера эквивалентны:
\p{L} \pL
Свойство | Совпадение | Замечание |
---|---|---|
C |
Другое | |
Cc |
Control | |
Cf |
Формат | |
Cn |
Не присвоено | |
Co |
Частное использование | |
Cs |
Суррогат | |
L |
Буква |
Включает следующие свойства: Ll ,
Lm , Lo , Lt и
Lu .
|
Ll |
Строчная буква | |
Lm |
Модификатор буквы | |
Lo |
Другая буква | |
Lt |
Заглавная буква | |
Lu |
Прописная буква | |
M |
Знак | |
Mc |
Пробельный знак | |
Me |
Окружающий знак | |
Mn |
Не пробельный знак | |
N |
Число | |
Nd |
Десятичное число | |
Nl |
Буквенное число | |
No |
Другое число | |
P |
Пунктуация | |
Pc |
Соединяющая пунктуация | |
Pd |
Знаки тире | |
Pe |
Закрывающая пунктуация | |
Pf |
Заключительная пунктуация | |
Pi |
Начальная пунктуация | |
Po |
Другая пунктуация | |
Ps |
Открывающая пунктуация | |
S |
Символ | |
Sc |
Денежный знак | |
Sk |
Модификатор символа | |
Sm |
Математический символ | |
So |
Другой символ | |
Z |
Разделитель | |
Zl |
Разделитель строки | |
Zp |
Разделитель абзаца | |
Zs |
Пробельный разделитель |
Расширенные свойства, такие как музыкальные символы
(InMusicalSymbols
) не поддерживаются в PCRE.
Указывание регистро-независимого (безрегистрового) режима не влияет на эти
управляющие последовательности. Например, \p{Lu}
всегда
совпадает только с прописными буквами.
Подмножества Unicode символов описываются как принадлежащие определенным сценариям. Любой символ из этих подмножеств может быть найден с использованием имени сценария. Например:
-
\p{Greek}
-
\P{Han}
Также те символы, которые не являются часть конкретного сценария объединены
вместе в сценарий Common
. Текущий список сценариев:
Arabic |
Armenian |
Avestan |
Balinese |
Bamum |
|
Batak |
Bengali |
Bopomofo |
Brahmi |
Braille |
|
Buginese |
Buhid |
Canadian_Aboriginal |
Carian |
Chakma |
|
Cham |
Cherokee |
Common |
Coptic |
Cuneiform |
|
Cypriot |
Cyrillic |
Deseret |
Devanagari |
Egyptian_Hieroglyphs |
|
Ethiopic |
Georgian |
Glagolitic |
Gothic |
Greek |
|
Gujarati |
Gurmukhi |
Han |
Hangul |
Hanunoo |
|
Hebrew |
Hiragana |
Imperial_Aramaic |
Inherited |
Inscriptional_Pahlavi |
|
Inscriptional_Parthian |
Javanese |
Kaithi |
Kannada |
Katakana |
|
Kayah_Li |
Kharoshthi |
Khmer |
Lao |
Latin |
|
Lepcha |
Limbu |
Linear_B |
Lisu |
Lycian |
|
Lydian |
Malayalam |
Mandaic |
Meetei_Mayek |
Meroitic_Cursive |
|
Meroitic_Hieroglyphs |
Miao |
Mongolian |
Myanmar |
New_Tai_Lue |
|
Nko |
Ogham |
Old_Italic |
Old_Persian |
Old_South_Arabian |
|
Old_Turkic |
Ol_Chiki |
Oriya |
Osmanya |
Phags_Pa |
|
Phoenician |
Rejang |
Runic |
Samaritan |
Saurashtra |
|
Sharada |
Shavian |
Sinhala |
Sora_Sompeng |
Sundanese |
|
Syloti_Nagri |
Syriac |
Tagalog |
Tagbanwa |
Tai_Le |
|
Tai_Tham |
Tai_Viet |
Takri |
Tamil |
Telugu |
|
Thaana |
Thai |
Tibetan |
Tifinagh |
Ugaritic |
|
Vai |
Yi |
\X
находит расширенный Unicode графемный кластер.
Расширенный графемный кластер - это один или несколько Unicode символов,
которые объединяются в один символьный знак (глиф). По сути, его можно рассматривать
как Unicode эквивалент для .
, так как он
находит один независимый комплексный символ, независимо от того, сколько отдельных
символов используется для его отрисовки.
Для версий PCRE до 8.32 (что соответствует версиям PHP до 5.4.14 при использовании
встроенной библиотеки PCRE), \X
равносилен
(?>\PM\pM*)
. Таким образом, он ищет символы без
свойства "mark", и рассматривает последовательность как атомарную группу (см ниже).
Символы со свойством "mark" обычно являются отличительными признаками, которые влияют на предыдущий символ.
Совпадение символов по Unicode свойству не является быстрой операцией,
потому для этой цели PCRE необходимо осуществить поиск в структуре данных
с более чем пятнадцатью тысяч символов. Поэтому традиционные управляющие
последовательности в PCRE, такие как \d
и \w
,
не используют Unicode свойства.