Свойства Unicode-символов
С версии стандарта Unicode 5.1.0 при выборе режима UTF-8
доступны три дополнительные управляющие последовательности для соответствия
общим типам символов. Вот они:
- \p{xx}
- символ со свойством xx
- \P{xx}
- символ без свойства xx
- \X
- расширенная последовательность Unicode
Имена свойств, которые выше представили символами xx
, ограничены
общими категориями свойств Unicode. У каждого символа есть ровно одно такое свойство,
которое обозначено двухбуквенной аббревиатурой. Для совместимости с Perl отрицание
можно указать, включив символ циркумфлекса «^» между открывающей скобкой и именем свойства.
Например, \p{^Lu}
— это то же самое, что и \P{Lu}
.
Если с управляющей последовательностью \p
или \P
указали только одну букву,
она включает все свойства, которые начинаются с этой буквы.
В этом случае при отсутствии отрицания фигурные скобки необязательны;
следующие два примера эквивалентны:
Поддерживаемые коды свойств
Свойство |
Совпадение |
Замечание |
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 |
Пробельный разделитель |
|
Модуль PCRE не поддерживает расширенные свойства наподобие музыкальных символов
(InMusicalSymbols
).
Указание регистронезависимого (безрегистрового) режима не влияет на эти
управляющие последовательности. Например, запись \p{Lu}
всегда
совпадает только с прописными буквами.
Наборы Unicode-символов описываются как те, что принадлежат конкретным сценариям.
Любой символ из этих наборов сопоставим с помощью имени сценария.
Например:
Символы, которые не принадлежат конкретному сценарию, объединяются
в сценарий 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-свойства.