我对RegexBuddy提供的正则表达式Unicode属性感到迷茫,我无法区分任何数字属性和数学符号属性似乎只匹配+
而不是-
,{{1}例如,},*
,/
。
RegexBuddy Unicode Properties http://i47.tinypic.com/mbqw6w.png
是否有关于正则表达式Unicode属性的示例的文档/参考?
答案 0 :(得分:8)
您在示例中列出的那些实际上是所有相同的Unicode字符属性, General Category 属性。一些正则表达式系统仅提供对这一个属性的访问;其他包括访问 Block 属性(不是非常有用)或脚本属性(更多更有用)。
Programming Perl, 4th edition第209页的以下文字中提供了对Perl正则表达式中\p{Property Name}
和\p{Property Name = Property Value}
语法的更完整说明,此处经其作者的许可转载:
所有标准Unicode属性实际上由两部分组成,如
\p{NAME=VALUE}
。因此,所有单部分属性都是官方Unicode的补充 属性。值为true的布尔属性始终可以缩写 作为单部分属性,允许您为\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}
。 perluniprops manpage列出了所有属性及其属性 Perl支持的别名,包括标准Unicode属性和Perl特性, 太。
section 5 on Properties from UAX#44, the Unicode Character Database中记录了Unicode字符属性的完整列表及其含义。那些必须支持以满足UTS#18’s RL 1.2属性的11个属性是:
RL1.2属性
为满足此要求,实施应至少提供最少的属性列表,包括以下内容:
- General_Category
- 脚本
- 字母
- 大写
- 小写
- White_Space
- Noncharacter_Code_Point
- Default_Ignorable_Code_Point
- ANY,ASCII,ASSIGNED
请注意,单字母字符类缩写,例如\w
,\d
,\s
,\b
及其大写补充,以及POSIX声音名称与\p{alpha}
类似,它们本身是根据UTS#18’s Annex C on Compatibility Properties中的Unicode字符属性定义的。
据我所知,当前符合Level 1 requirements of UTS#18 for Basic Unicode Support的仅正则表达式引擎为Perl,ICU’s regex library for C and C++,Java 7’s Pattern
class和{ {3}}。 Android中使用的正则表达式实际上是ICU,而不是人们可能想象的Java,因此使用Unicode可以更好地工作。
对于Java 7,您必须使用UNICODE_CHARACTER_CLASS
模式编译标志或嵌入式(?U)
来获取RL1.2a(\w
& c)内容。对于Matthew Barnett’s excellent regexp
library for Python 2 and Python 3,您似乎需要嵌入(*PCRE_UCP)
,或将其用作编译标记。这可能取决于你的php版本是如何构建的,这可能是一个问题。
Russ Cox的PCRE,其中包含可用于C和C ++的绑定,加上RE2 library,现在是Perl regex engine plugin,支持两个最重要的属性,包括常规类别和脚本。
我相信PCRE仍然不能满足RL 1.2对物业的要求。它处理General Category和Script属性,它们是两个最重要和最常用的属性,但似乎不能让你获得其他九个必需的属性。它的POSIX兼容属性lkike alpha
,upper
,lower
和space
具体记录为7位ASCII,与the standard regex library used by Go programming language相反。但是,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(和Perl)不同,因为它缺少额外的字母和其他\p{GC=Connector_Punctuation}
字符。 UTS#18的下一版本还将\p{Join_Control}
添加到\p{word}
个字符集中。
在符合RL 1.2和RL 1.2a的四个中,除了Java 7之外,其他所有符合 (或非常接近会议,有时使用\N{…}
之类的替代语法代替\p{name=…}
语法) RL 1.2a从本月早些时候发布的UTS#18建议更新中获取,部分内容如下:
RL2.7完整属性
为了满足此要求,实现应支持下面列出的所有受支持Unicode版本的属性,其值与该版本的Unicode定义相匹配。
为了满足要求RL2.7,实现必须满足受支持的Unicode版本的属性的Unicode定义,而不是其他可能的定义。但是,实现对这些属性使用的名称可能与属性的正式Unicode名称不同。例如,如果正则表达式引擎已经具有名为"字母"的属性,为了向后兼容,它可能需要使用不同的名称,例如" Unicode_Alphabetic",用于列出的相应属性RL1.2。
[表格简称为-chchrist]
在
\p{name=…}
和\N{…}
中使用了Name和Name_Alias属性。 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字符属性时使用的三个独立工具是the new RL 2.7 on Full Properties, uniprops和unichars。它们也可以作为较大*uninames的一部分使用。
快速演示:
$ 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)
答案 1 :(得分:7)
可以在http://www.unicode.org/Public/UNIDATA/PropList.txt中找到Unicode属性列表。
每个字符的属性都可以在http://www.unicode.org/Public/UNIDATA/UnicodeData.txt(1.2 MB)中找到。
在你的情况下,
+
(加号)是 Sm ,-
(HYPHEN-MINUS) Pd ,*
(ASTERISK) Po ,/
(SOLIDUS)也是 Po 和^
(CIRCUMFLEX ACCENT) Sk 。 最好将它们与[-+*/^]
匹配。