Regex - справочник по свойствам Юникода и примеры
Я чувствую себя потерянным из-за свойств Regex Unicode, представленных RegexBuddy, я не могу различить любое из свойств Number, и свойство символа Math только кажется, что оно совпадает +
но нет -
, *
, /
, ^
например.
http://i47.tinypic.com/mbqw6w.png
Есть ли документация / ссылки с примерами по регулярным выражениям свойств Юникода?
2 ответа
Список свойств Unicode можно найти по http://www.unicode.org/Public/UNIDATA/PropList.txt.
Свойства для каждого символа можно найти в http://www.unicode.org/Public/UNIDATA/UnicodeData.txt (1,2 МБ).
В твоем случае,
+
(ПЛЮС ЗНАК) это Sm,-
(ГИФЕН-МИНУС) - это Pd,*
(Звездочка) - это По,/
(SOLIDUS) также Po, и^
(CIRCUMFLEX ACCENT) является Sk.
Вам лучше сопоставить их с [-+*/^]
,
Свойства символов Юникода
Те, что вы перечислили там в своем примере, на самом деле являются тем же свойством символа Unicode, свойством General Category. Некоторые системы регулярных выражений предоставляют доступ только к одному этому свойству; другие включают доступ к свойству Block (не очень полезно) или к свойству Script (гораздо полезнее).
Более полное объяснение \p{Property Name}
а также \p{Property Name = Property Value}
синтаксис в регулярных выражениях Perl приведен в следующем тексте на странице 209 Programming Perl, 4- е издание, здесь воспроизведено с любезного разрешения его автора:
Все стандартные свойства Unicode на самом деле состоят из двух частей, как в
\p{NAME=VALUE}
, Поэтому все однокомпонентные свойства являются дополнением к официальным свойствам Юникода. Булевы свойства со значениями 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}
, В man- странице perluniprops перечислены все свойства и их псевдонимы, которые поддерживает Perl, как стандартные свойства Unicode, так и специальные предложения Perl.
Полный список свойств символов Unicode и их значений приведен в разделе 5 "Свойства из UAX#44", "База данных символов Unicode". Эти одиннадцать свойств, которые должны поддерживаться для соответствия требованиям RTS 1.2 UTS № 18 по свойствам, таковы:
RL 1.2 Свойства
Чтобы соответствовать этому требованию, реализация должна предоставлять как минимум минимальный список свойств, состоящий из следующего:
- General_Category
- скрипт
- буквенный
- Верхний регистр
- Строчные
- White_Space
- Noncharacter_Code_Point
- Default_Ignorable_Code_Point
- ЛЮБОЙ, ASCII, НАЗНАЧЕННЫЙ
Обратите внимание, что однобуквенные символьные сокращения классов, такие как \w
, \d
, \s
, \b
и их заглавные буквы, а также POSIX-звучащие имена, такие как \p{alpha}
сами определяются в терминах свойств символов Unicode в Приложении C к UTS#18 "Свойства совместимости".
Насколько мне известно, единственными движками регулярных выражений, в настоящее время удовлетворяющими требованиям Уровня 1 UTS#18 для базовой поддержки Unicode, являются Perl, библиотека регулярных выражений ICU для C и C++, Java 7's. Pattern
класс, и Мэтью Барнетт отлично regexp
библиотека для Python 2 и Python 3. Регулярные выражения, используемые в Android, на самом деле являются ICU, а не Java, как можно было бы представить, и поэтому работают с Unicode намного лучше.
Для Java 7 вы должны использовать UNICODE_CHARACTER_CLASS
флаг компиляции шаблона или встроенный (?U)
, чтобы получить RL1.2a (\w
и в) дела идут. Для PCRE вам, кажется, нужно встраивать (*PCRE_UCP)
или используйте это как флаг компиляции. Это может зависеть от того, как была построена ваша версия php, что может быть проблемой.
Библиотека RE2 Расса Кокса с привязками, доступными для C и C++, а также в качестве плагина движка регулярных выражений Perl, и теперь стандартная библиотека регулярных выражений, используемая языком программирования Go, поддерживает два наиболее важных свойства, как General Category и Script.
PCRE и PHP
Я считаю, что PCRE все еще далека от выполнения требований RL 1.2 по свойствам. Он обрабатывает как свойства "Общая категория", так и свойства "Сценарий", которые являются двумя наиболее важными и часто используемыми свойствами, но, похоже, не позволяет получить остальные девять необходимых свойств. Его POSIX-совместимые свойства lkike alpha
, upper
, lower
, а также space
специально документированы как только 7-битные ASCII, в отличие от RL 1.2a. Тем не менее, PCRE также предлагает эти специальные предложения:
Xan
Буквенно-цифровой: объединение свойств L и NXps
Пространство POSIX: свойство Z или табуляция, NL, VT, FF, CRXsp
Perl space: свойство Z или табуляция, NL, FF, CRXwd
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", для соответствующего свойства, указанного в RL 1.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. Свойства, выделенные серым цветом, защищены свойствами RL 1.2. Для получения дополнительной информации о свойствах см. UAX#44, База данных символов Unicode [UAX44].
Инструменты исследования свойств Юникода
Три автономных инструмента, которые вы можете захотеть использовать для изучения свойств символов Unicode, - это uniprops, unichars и * uninames. Они также доступны как часть большего набора Unicode:: Tussle от 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)