Справочное руководство и примеры ссылок Regex – Unicode

Я чувствую себя потерянным с помощью свойств 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 & PHP

Я считаю, что 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].

Инструменты поиска ресурсов 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)