首页 » 精通正则表达式(第3版) » 精通正则表达式(第3版)全文在线阅读

《精通正则表达式(第3版)》Java对/p{…}和/P{…}的支持

关灯直达底部

Java Support for/p{…}and/P{…}

「/p{…}」和「/P{…}」结构支持Unicode的属性和区块,也支持特殊的“Java”字符属性。这种支持针对Unicode Version 4.0.0(Java 1.4.2只支持Unicode Version 3.0.0)。

Unicode属性

Unicode属性是通过/p{Lu}之类的缩写名字来引用的(参加122页的列表)。单字母属性名可以省略括号,/pL等价于/p{L}。而/p{Lowercase_Letter}之类的长名称是不支持的。Java 1.5及之前的版本是不支持Pi和Pf属性的,因此,具有这种属性的字符不能用/p{P}来匹配(Java 1.6支持)。

“未赋值的代码点”属性/p{Cn}匹配的字符,不能由“其他字符”属性/p{C}来匹配。Java不支持组合属性/p{L&}。

Java支持伪属性/p{all},它等价于「(?S:.)」,但不支持/p{assigned}和/p{unassigned}伪属性,不过我们可以用/P{Cn}和/p{Cn}来代替。

Unicode区块

Unicode block的支持要求使用‘In’前缀。请翻到第402页查阅具体的版本信息,了解「/p{…}」和「/P{…}」中能够出现的区块名称。

为了保持向后兼容性,Java 1.5中有两个Unicode区块在Unicode Version 3.0和4.0之间发生了变化。除了Unicode 4.0提供的Combining Diacritical Marks for Symbols和Greek and Coptic之外,还可以使用本不属于Unicode 4.0的名称Combining Marks for Symbols和Greek。

Java 1.4.2有个涉及Arabic Presentation Forms-B和Latin Extended-B的bug,在Java 1.5中已经修正。

特殊的Java字符属性

从 Java 1.5.0 开始,/p{…}和/P{…}结构能够支持 java.lang.Character 中未弃用(non-deprecated)的isSomething方法。为了在正则表达式中使用此功能,请把方法名开头的‘is’替换成‘java’,然后使用「/p{…}」和「/P{…}」。例如,由java.lang.Characer.匹配的字符也能用正则表达式「/p{javaJavaIdentifierStart}」来匹配(请参考java.lang.Character类的文档)。