Я чувствую себя потерянным с помощью свойств Regex Unicode, представленных RegexBuddy, я не могу различить ни одно из свойств Number и свойство Math symbol, похоже, похоже, например, +
но не -
, *
, /
, ^
.
Свойства Ungeode RegexBuddy http://img.ruphp.com/pcre/mbqw6w.png
Есть ли какая-либо документация / ссылка с примерами на регулярные выражения Unicode-свойств?
Список свойств Unicode можно найти в http://www.unicode.org/Public/UNIDATA/PropList.txt .
Свойства для каждого символа можно найти в http://www.unicode.org/Public/UNIDATA/UnicodeData.txt (1.2 MB).
В твоем случае,
+
(PLUS SIGN) – это Sm , -
(HYPHEN-MINUS) – Pd , *
(ASTERISK) – это Po , /
(SOLIDUS) также Po , и ^
(CIRCUMFLEX ACCENT) – Sk . Вам лучше сопоставить их с [-+*/^]
.
Те, которые вы указали там в вашем примере, на самом деле все равно имеют свойство символа Юникод, свойство « Общая категория» . Некоторые системы регулярных выражений предоставляют доступ только к одному свойству; другие включают доступ к свойству Block (не очень полезный) или к свойству Script ( гораздо полезнее).
Более полное объяснение синтаксиса \p{Property Name}
и \p{Property Name = Property Value}
в регулярных выражениях Perl приведено в следующем тексте со страницы 209 из « Программирование Perl, 4- е издание» , здесь воспроизведено с любезного разрешения автора: 😼
Все стандартные свойства Unicode фактически состоят из двух частей, как в
\p{NAME=VALUE}
. Таким образом, все свойства одной части являются дополнением к официальным свойствам Unicode. Булевы свойства, значения которых истинны, всегда могут быть сокращены как свойства одной части, что позволяет вам написать\p{Lowercase}
для\p{Lowercase=True}
. Другие типы свойств, кроме булевых свойств, принимают строковые, числовые или перечислимые значения. Perl также предоставляет одноадресные псевдонимы для всех общих категорий, скриптов и свойств блоков, а также рекомендации уровня один из Unicode Technical Standard # 18 on Regular Expressions (версия 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.
Полный список свойств символа Юникода и их значения описаны в разделе 5 «Свойства из UAX # 44», базы данных символов Юникода . Те одиннадцать свойств, которые должны поддерживаться для соответствия RTS 1.2 RTS 1.2 для объектов UTS , следующие:
Свойства RL1.2
Чтобы выполнить это требование, реализация должна предоставить как минимум минимальный список свойств, состоящий из следующего:
- General_Category
- скрипт
- буквенный
- Верхний регистр
- Строчные
- White_Space
- Noncharacter_Code_Point
- Default_Ignorable_Code_Point
- ЛЮБОЙ, ASCII, НАЗНАЧЕН
Обратите внимание, что однобуквенные аббревиатуры класса символов, такие как \w
, \d
, \s
, \b
и их прописные дополнения, а также имена имен POSIX, такие как \p{alpha}
, сами определяются в терминах символа Unicode свойства в приложении UTS № 18 по свойствам совместимости .
Насколько я знаю, единственные в настоящее время регулярные выражения, отвечающие требованиям уровня 1 UTS № 18 для базовой поддержки Unicode, – Perl , библиотека регулярных выражений ICU для C и C ++ , класс Pattern
Java 7 и превосходная библиотека regexp
Мэтью Барнетта для Python 2 и Python 3 . Регулярные выражения, используемые в Android, на самом деле являются ICU, а не Java, как можно было бы себе представить, и поэтому работать с Unicode намного лучше.
Для Java 7 вы должны использовать флаг компиляции шаблона UNICODE_CHARACTER_CLASS
или встроенный (?U)
, чтобы получить материал RL1.2a ( \w
& c). Для PCRE вам кажется, что нужно вставлять (*PCRE_UCP)
или использовать это как флаг компиляции. Это может зависеть от того, как была построена ваша версия php, что может быть проблемой.
Библиотека RE2 от Russ Cox, с привязками, доступными для C и C ++, плюс плагин Perl regex engine , а теперь стандартная библиотека регулярных выражений, используемая языком программирования Go , поддерживает два самых важных свойства, как для общей категории, так и для скрипта.
Я считаю, что PCRE по-прежнему не отвечает требованиям RL 1.2 по свойствам. Он обрабатывает как общие категории, так и свойства скрипта, которые являются двумя наиболее важными и обычно используемыми свойствами, но, похоже, не позволяют вам получить еще девять необходимых свойств. Его совместимые с POSIX свойства lkike alpha
, upper
, lower
и space
специально описаны как 7-битные ASCII, в отличие от RL 1.2a . Однако PCRE также предлагает эти специальные предложения:
Xan
Alphanumeric: объединение свойств L и N Xps
POSIX space: свойство Z или tab, NL, VT, FF, CR Xsp
Perl space: свойство Z или tab, NL, FF, CR Xwd
Perl word: свойство Xan или подчеркивание Обратите внимание, что PCRE \p{Xan}
по-прежнему отличается от того, что означает Unicode \p{alnum}
, потому что отсутствует комбинация меток, например, и некоторых буквенных символов. Perl \p{alnum}
следует определению Unicode. Напротив, PCRE \p{Xwd}
отличается от Unicode (и Perl's) тем, что ему не хватает дополнительных алфавитов и остальных символов \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 на Full Properties из предлагаемого обновления для UTS # 18, опубликованного ранее в этом месяце, в котором, в частности, говорится:
Полные свойства RL2.7
Чтобы выполнить это требование, реализация должна поддерживать все перечисленные ниже свойства, которые находятся в поддерживаемой версии Unicode, со значениями, которые соответствуют определениям Unicode для этой версии.
Чтобы удовлетворить требованиям RL2.7, реализация должна удовлетворять определению Unicode свойств поддерживаемой версии Unicode, а не другим возможным определениям. Однако имена, используемые реализацией для этих свойств, могут отличаться от формальных имен Unicode для свойств. Например, если у механизма регулярных выражений уже есть свойство «Алфавитный указатель», для обратной совместимости может потребоваться использовать определенное имя, например «Unicode_Alphabetic», для соответствующего свойства, указанного в RL1.2.
[таблица опущена для краткости -tchrist]
Свойства Name и Name_Alias используются в
\p{name=…}
и\N{…}
. Данные в NamedSequences.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 Character Database [UAX44].
Три автономных инструмента, которые вы, возможно, захотите использовать для изучения свойств символа Юникода, – это 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)