Ali*_*xel 2 php regex unicode pcre character-properties
我觉得失去了与使用RegexBuddy给出的正则表达式的Unicode属性,我不能对任何数量的属性和数学符号属性的区别似乎只匹配+,但不-,*,/,^例如.
RegexBuddy Unicode Properties http://i47.tinypic.com/mbqw6w.png
是否有关于正则表达式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仍然不能满足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,CRXsp Perl空间:属性Z或制表符,NL,FF,CRXwd Perl字:属性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名称不同.例如,如果正则表达式引擎已经具有名为"字母"的属性,则为了向后兼容,它可能需要为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字符属性三个独立的工具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)
可以在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.你最好与它们匹配[-+*/^].