Свойства Unicode-символов

С версии стандарта 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Другое 
CcControl 
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-символов описываются как те, что принадлежат конкретным сценариям. Любой символ из этих наборов сопоставим с помощью имени сценария. Например:

  • \p{Greek}
  • \P{Han}

Символы, которые не принадлежат конкретному сценарию, объединяются в сценарий Common. Текущий список сценариев:

Поддерживаемые сценарии
ArabicArmenianAvestanBalineseBamum
BatakBengaliBopomofoBrahmiBraille
BugineseBuhidCanadian_AboriginalCarianChakma
ChamCherokeeCommonCopticCuneiform
CypriotCyrillicDeseretDevanagariEgyptian_Hieroglyphs
EthiopicGeorgianGlagoliticGothicGreek
GujaratiGurmukhiHanHangulHanunoo
HebrewHiraganaImperial_AramaicInheritedInscriptional_Pahlavi
Inscriptional_ParthianJavaneseKaithiKannadaKatakana
Kayah_LiKharoshthiKhmerLaoLatin
LepchaLimbuLinear_BLisuLycian
LydianMalayalamMandaicMeetei_MayekMeroitic_Cursive
Meroitic_HieroglyphsMiaoMongolianMyanmarNew_Tai_Lue
NkoOghamOld_ItalicOld_PersianOld_South_Arabian
Old_TurkicOl_ChikiOriyaOsmanyaPhags_Pa
PhoenicianRejangRunicSamaritanSaurashtra
SharadaShavianSinhalaSora_SompengSundanese
Syloti_NagriSyriacTagalogTagbanwaTai_Le
Tai_ThamTai_VietTakriTamilTelugu
ThaanaThaiTibetanTifinaghUgaritic
VaiYi    

Последовательность \X соответствует кластеру расширенных Unicode-графем. Расширенный графемный кластер — один или несколько Unicode-символов, которые объединяются в один символьный знак (глиф). По сути, его можно рассматривать как Unicode-эквивалент для ., поскольку он находит один независимый комплексный символ, независимо от того, сколько отдельных символов нужно для его отрисовки.

Для версий PCRE до 8.32 (что соответствует версиям PHP до 5.4.14 при работе со встроенным модулем PCRE), последовательность \X равносильна записи (?>\PM\pM*). Таким образом, он ищет символы без свойства «mark», и рассматривает последовательность как атомарную группу (см ниже). Символы со свойством «mark» обычно являются отличительными признаками, которые влияют на предыдущий символ.

Совпадение символов по Unicode-свойству — не быстрая операция, поскольку модулю PCRE приходится выполнить поиск в структуре данных, которая содержит более пятнадцати тысяч символов. Поэтому традиционные управляющие последовательности в модуле PCRE, например \d и \w, не используют Unicode-свойства.

To Top