正则表达式 - Unicode属性参考和示例

Ali*_*xel 2 php regex unicode pcre character-properties

我觉得失去了与使用RegexBuddy给出的正则表达式的Unicode属性,我不能对任何数量的属性和数学符号属性的区别似乎只匹配+,但不-,*,/,^例如.

RegexBuddy Unicode Properties http://i47.tinypic.com/mbqw6w.png

是否有关于正则表达式Unicode属性的示例的文档/参考?

tch*_*ist 9

Unicode字符属性

您在示例中列出的那些实际上是所有相同的Unicode字符属性,即General Category属性.一些正则表达式系统仅提供对这一个属性的访问; 其他包括访问属性(不是很有用),或在脚本属性(很多比较有用).

Perl正则表达式中的语法\p{Property Name}\p{Property Name = Property Value}语法的更完整的解释在编程Perl 4 版的第209页的下面的文本中给出,这里以其作者的许可再现:

所有标准的Unicode属性实际上都由两部分组成,如 \p{NAME=VALUE}.因此,所有单部分属性都是官方Unicode属性的补充.布尔属性,其值为true总是可以简写为一个部分特性,它允许你写\p{Lowercase}\p{Lowercase=True}.除布尔属性之外的其他类型的属性采用字符串,数字或枚举值.Perl还为所有常规类别,脚本和块属性提供单部分别名,以及正则表达式(版本13,2008-08)上的Unicode技术标准#18的一级建议 ,例如\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手册页列出了Perl的支持,包括标准Unicode属性和Perl的特价商品,太所有属性及其别名.

有关Unicode字符属性及其含义的完整列表,请参见UAX#44属性(Unicode字符数据库)的第5节.在属性上满足UTS#18的RL 1.2 必须支持 11个属性是:

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中.

据我所知,目前唯一满足UTS#18基本Unicode支持的1级要求的正则表达式引擎是Perl,ICU用于C和C++的正则表达式库,Java 7 Pattern,以及Matthew Barnett regexp用于Python 2和Python 的优秀库3.Android中使用的正则表达式实际上是ICU,而不是人们可能想象的Java,因此使用Unicode可以更好地工作.

对于Java 7,您必须使用UNICODE_CHARACTER_CLASS模式编译标志或嵌入式标记(?U)来获取RL1.2a(\w&c)内容.对于PCRE,您似乎需要嵌入(*PCRE_UCP)或将其用作编译标志.这可能取决于你的php版本是如何构建的,这可能是一个问题.

Russ Cox的RE2库,带有可用于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字:属性Xan或下划线

请注意,PCRE \p{Xan}仍然与Unicode所说的\p{alnum}必然不同,因为它缺少组合标记,例如,某些字母符号.Perl \p{alnum}遵循Unicode定义.在远离方式中,PCRE \p{Xwd}与Unicode(和Per​​l)不同,因为它缺少额外的字母和其他\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名称不同.例如,如果正则表达式引擎已经具有名为"字母"的属性,则为了向后兼容,它可能需要为RL1.2中列出的相应属性使用不同的名称,例如"Unicode_Alphabetic".

[为简洁而省略表 - -chchrist]

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字符数据库[UAX44].

Unicode属性探索工具

你可能要保持方便的探索Unicode字符属性三个独立的工具uniprops, 单字符,而*uninames.它们也可以作为CPAN更大的Unicode :: Tussle套件的一部分.

快速演示:

$ 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)
Run Code Online (Sandbox Code Playgroud)


ken*_*ytm 7

可以在http://www.unicode.org/Public/UNIDATA/PropList.txt中找到Unicode属性列表.

每个字符的属性可以在http://www.unicode.org/Public/UNIDATA/UnicodeData.txt(1.2 MB)中找到.

在你的情况下,

  • +(PLUS SIGN)是Sm,
  • -(HYPHEN-MINUS)是Pd,
  • *(ASTERISK)是Po,
  • /(SOLIDUS)也是,和
  • ^(CIRCUMFLEX ACCENT)是Sk.

你最好与它们匹配[-+*/^].