Java对\p{…}和\P{…}的支持

04-13Ctrl+D 收藏本站

关灯 直达底部

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类的文档)。