Свойства символов Unicode
Те, что вы перечислили там в своем примере, на самом деле являются тем же свойством символа Юникода, свойством Общая категория . Некоторые системы регулярных выражений предоставляют доступ только к одному этому свойству; другие включают доступ к свойству Block (не очень полезно) или к свойству Script ( много более полезно).
Более полное объяснение синтаксиса \p{Property Name}
и \p{Property Name = Property Value}
в регулярных выражениях Perl дано в следующем тексте на странице 209 ? Программирование на Perl, 4 th edition , воспроизведено с разрешения автора: its
Все стандартные свойства Unicode на самом деле состоят из двух частей, как в
\p{NAME=VALUE}
. Поэтому все однокомпонентные свойства являются дополнением к официальному Unicode
свойства. Булевы свойства, значения которых имеют значение true, всегда могут быть сокращены
как однокомпонентные свойства, которые позволяют записать \p{Lowercase}
для \p{Lowercase=True}
. Другие типы свойств, кроме логических свойств, принимают строковые, числовые,
или перечисляемые значения. Perl также предоставляет псевдонимы из одной части для всех общих
свойства категорий, сценариев и блоков, а также рекомендации первого уровня от
Технический стандарт Unicode # 18 на регулярные выражения (версия 13, от
2008-08), например \p{Any}
.
Например, \p{Armenian}
, \p{IsArmenian}
и \p{Script=Armenian}
все представляют
то же свойство, что и \p{Lu}
, \p{GC=Lu}
, \p{Uppercase_Letter}
и
\p{General_Category=Uppercase_Letter}
. Другие примеры бинарных свойств
(те, чьи значения неявно истинны) включают \p{Whitespace}
, \p{Alphabetic}
, \p{Math}
и \p{Dash}
. Примеры свойств, которые не являются двоичными свойствами
включают \p{Bidi_Class=Right_to_Left}
, \p{Word_Break=A_Letter}
и
\p{Numeric_Value=10}
. perluniprops manpage перечисляет все свойства и их
псевдонимы, которые поддерживает Perl, как стандартные свойства Unicode, так и специальные Perl,
тоже.
Полный список свойств символов Unicode и их значения задокументирован в разделе Свойства на UAX # 44, База данных символов Unicode . Те одиннадцать свойств, которые должны поддерживаться для соответствия RTS 1.2 UTS # 18 в свойствах, таковы:
RL1.2 Свойства
Для удовлетворения этого требования реализация должна предоставлять как минимум минимальный список свойств, состоящий из следующего:
- General_Category
- Сценарий
- Алфавитный указатель
- Прописные
- Строчные
- White_Space
- Noncharacter_Code_Point
- Default_Ignorable_Code_Point
- ЛЮБОЙ, ASCII, НАЗНАЧЕН
Обратите внимание, что однобуквенные символьные аббревиатуры, такие как \w
, \d
, \s
, \b
и их заглавные дополнения, а также POSIX-звучащие имена, такие как \p{alpha}
, сами определены с точки зрения свойств символов Unicode в UTS # 18 Приложение C о свойствах совместимости .
Насколько мне известно, только движки регулярных выражений, в настоящее время удовлетворяющие требованиям уровня 1 UTS # 18 для базовой поддержки Unicode , составляют Perl , Библиотека регулярных выражений ICU для C и C ++ , Java 7 Pattern
class и Прекрасная библиотека regexp
Мэтью Барнетта для Python 2 и Python 3 . Регулярные выражения, используемые в Android, на самом деле являются ICU, а не Java, как можно было бы представить, и поэтому работают с Unicode намного лучше.
Для Java 7 вы должны использовать флаг компиляции шаблона UNICODE_CHARACTER_CLASS
или встроенный (?U)
, чтобы запустить RL1.2a (\w
& c). Для PCRE вам нужно встроить (*PCRE_UCP)
или использовать его как флаг компиляции. Это может зависеть от того, как была построена ваша версия php, что может быть проблемой.
Расс Кокса RБиблиотека E2 , с привязками, доступными для C и C ++, плюс Плагин движка регулярных выражений Perl , а теперь стандартная библиотека регулярных выражений, используемая языком программирования Go , поддерживает два наиболее важных свойства, как общая категория, так и сценарий.
PCRE & PHP
Я считаю, что PCRE все еще не соответствует требованиям RL 1.2 к свойствам. Он обрабатывает свойства General Category и Script, которые являются двумя наиболее важными и часто используемыми свойствами, но, похоже, не позволяет получить остальные девять необходимых свойств. Его POSIX-совместимые свойства lkike alpha
, upper
, lower
и space
специально задокументированы как только 7-битные ASCII, в отличие от RL 1.2a . Тем не менее, PCRE также предлагает эти специальные предложения:
Xan
Буквенно-цифровой: объединение свойств L и N
Xps
Пространство POSIX: свойство Z или табуляция, NL, VT, FF, CR
Xsp
Пробел Perl: свойство Z или табуляция, NL, FF, CR
Xwd
Perl word: свойство Xan или подчеркивание
Обратите внимание, что PCRE \p{Xan}
все еще отличается от того, что должно означать Unicode \p{alnum}
, потому что в нем отсутствуют, например, метки объединения и некоторые буквенные символы. Perl \p{alnum}
соответствует определению Unicode. В отличие от PCRE \p{Xwd}
отличается от Unicode (и Perl) тем, что в нем отсутствуют лишние алфавиты и остальные символы \p{GC=Connector_Punctuation}
. Следующая редакция UTS # 18 также добавляет \p{Join_Control}
к набору \p{word}
символов.
Дополнительные свойства
Из этих четырех, которые соответствуют RL 1.2 и RL 1.2a, все, кроме Java 7, также встречают (или очень близко подходят к встрече, иногда в альтернативном синтаксисе, таком как \N{…}
вместо \p{name=…}
синтаксис) новый RL 2.7 на полных свойствах из предложенного обновления к UTS # 18, опубликованного ранее в этом месяце, который читается частично:
RL2.7 Полные свойства
Чтобы соответствовать этому требованию, реализация должна поддерживать все перечисленные ниже свойства в поддерживаемой версии Unicode со значениями, которые соответствуют определениям Unicode для этой версии.
Чтобы соответствовать требованию RL2.7, реализация должна удовлетворять определению Unicode свойств для поддерживаемой версии Unicode, а не другим возможным определениям. Однако имена, используемые реализацией для этих свойств, могут отличаться от формальных имен Unicode для свойств. Например, если механизм регулярных выражений уже имеет свойство под названием «Alphabetic», для обратной совместимости может потребоваться использование отдельного имени, такого как «Unicode_Alphabetic», для соответствующего свойства, указанного в RL1.2.
[таблица опущена для краткости —христ]
Свойства Name и Name_Alias используются в \p{name=…}
и \N{…}
. Данные в NamedSeptions.txt также используются в \N{…}
. Для получения дополнительной информации см. Раздел 2.5, Свойства имени. Свойства Script и Script_Extensions используются в \p{scx=…}
. Для получения дополнительной информации см. Раздел 1.2.2, Script_Property.
Список исключает дополнительные, устаревшие и устаревшие свойства, большинство предварительных свойств, а также свойства Unicode_1_Name и Unicode_Radical_Stroke. Свойства, выделенные серым цветом, защищены свойствами RL1.2. Для получения дополнительной информации о свойствах см. UAX # 44, База данных символов Unicode [UAX44].
Инструменты исследования свойств Unicode
Три автономных инструмента, которые вы, возможно, захотите использовать для изучения свойств символов Unicode: uniprops ,
unichars и * uninames . Они также доступны как часть большого Unicode :: Tussle suite от CPAN .
Быстрые демонстрации:
$ uniprops -a 3b1
U+03B1 ‹α› \N{GREEK SMALL LETTER ALPHA}
\w \pL \p{LC} \p{L_} \p{L&} \p{Ll}
All Any Alnum Alpha Alphabetic Assigned Greek Is_Greek InGreek Cased Cased_Letter LC
Changes_When_Casemapped CWCM Changes_When_Titlecased CWT Changes_When_Uppercased CWU Ll L Gr_Base
Grapheme_Base Graph GrBase Grek Greek_And_Coptic ID_Continue IDC ID_Start IDS Letter L_
Lowercase_Letter Lower Lowercase Print Word XID_Continue XIDC XID_Start XIDS X_POSIX_Alnum
X_POSIX_Alpha X_POSIX_Graph X_POSIX_Lower X_POSIX_Print X_POSIX_Word
Age=1.1 Bidi_Class=L Bidi_Class=Left_To_Right BC=L Block=Greek Block=Greek_And_Coptic BLK=Greek
Canonical_Combining_Class=0 Canonical_Combining_Class=Not_Reordered CCC=NR
Canonical_Combining_Class=NR Decomposition_Type=None DT=None East_Asian_Width=A
East_Asian_Width=Ambiguous EA=A Grapheme_Cluster_Break=Other GCB=XX Grapheme_Cluster_Break=XX
Script=Greek Hangul_Syllable_Type=NA Hangul_Syllable_Type=Not_Applicable HST=NA
Joining_Group=No_Joining_Group JG=NoJoiningGroup Joining_Type=Non_Joining JT=U Joining_Type=U
Line_Break=AL Line_Break=Alphabetic LB=AL Numeric_Type=None NT=None Numeric_Value=NaN NV=NaN
Present_In=1.1 IN=1.1 Present_In=2.0 IN=2.0 Present_In=2.1 IN=2.1 Present_In=3.0 IN=3.0 Present_In=3.1
IN=3.1 Present_In=3.2 IN=3.2 Present_In=4.0 IN=4.0 Present_In=4.1 IN=4.1 Present_In=5.0 IN=5.0
Present_In=5.1 IN=5.1 Present_In=5.2 IN=5.2 Present_In=6.0 IN=6.0 SC=Grek Script=Grek
Sentence_Break=LO Sentence_Break=Lower SB=LO Word_Break=ALetter WB=LE Word_Break=LE
$ unichars '\pN' '\D' '\p{Latin}'
Ⅰ 8544 02160 ROMAN NUMERAL ONE
Ⅱ 8545 02161 ROMAN NUMERAL TWO
Ⅲ 8546 02162 ROMAN NUMERAL THREE
Ⅳ 8547 02163 ROMAN NUMERAL FOUR
Ⅴ 8548 02164 ROMAN NUMERAL FIVE
Ⅵ 8549 02165 ROMAN NUMERAL SIX
Ⅶ 8550 02166 ROMAN NUMERAL SEVEN
Ⅷ 8551 02167 ROMAN NUMERAL EIGHT
(etc)
$ uninames Old English
æ 00E6 LATIN SMALL LETTER AE
= latin small ligature ae (1.0)
= ash (from Old English æsc)
* Danish, Norwegian, Icelandic, Faroese, Old English, French, IPA
x (latin small ligature oe - 0153)
x (cyrillic small ligature a ie - 04D5)
ð 00F0 LATIN SMALL LETTER ETH
* Icelandic, Faroese, Old English, IPA
x (latin capital letter eth - 00D0)
x (greek small letter delta - 03B4)
x (partial differential - 2202)
þ 00FE LATIN SMALL LETTER THORN
* Icelandic, Old English, phonetics
* Runic letter borrowed into Latin script
x (runic letter thurisaz thurs thorn - 16A6)
œ 0153 LATIN SMALL LIGATURE OE
= ethel (from Old English eðel)
* French, IPA, Old Icelandic, Old English, ...
x (latin small letter ae - 00E6)
x (latin letter small capital oe - 0276)
ƿ 01BF LATIN LETTER WYNN
= wen
* Runic letter borrowed into Latin script
* replaced by "w" in modern transcriptions of Old English
* uppercase is 01F7
x (runic letter wunjo wynn w - 16B9)
ǣ 01E3 LATIN SMALL LETTER AE WITH MACRON
* Old Norse, Old English
: 00E6 0304
⁊ 204A TIRONIAN SIGN ET
* Irish Gaelic, Old English, ...
x (ampersand - 0026)