Java正则表达式中的POSIX字符等价物

8
我想在Java中使用像这样的正则表达式:[[=a=][=e=][=i=]],但Java不支持POSIX类[=a=], [=e=]等。我该怎么做?更确切地说,有没有办法不使用US-ASCII?

2
请勿在您的帖子中添加第三方统计跟踪器。谢谢。 - Michael Myers
3个回答

15

Java支持posix字符类。 语法只是有所不同,例如:

\p{Lower}
\p{Upper}
\p{ASCII}
\p{Alpha}
\p{Digit}
\p{Alnum}
\p{Punct}
\p{Graph}
\p{Print}
\p{Blank}
\p{Cntrl}
\p{XDigit}
\p{Space}

仅使用US ASCII。是否有一种方法可以使用某些区域设置? - Stephan
@Stephan,很不幸我不知道有任何方法。但你可以手动匹配Unicode字符以创建自己的字符组。 - Johan Sjöberg

6

引用自http://download.oracle.com/javase/1.6.0/docs/api/java/util/regex/Pattern.html

POSIX字符类(仅限US-ASCII)

\p{Lower}   A lower-case alphabetic character: [a-z]
\p{Upper}   An upper-case alphabetic character:[A-Z]
\p{ASCII}   All ASCII:[\x00-\x7F]
\p{Alpha}   An alphabetic character:[\p{Lower}\p{Upper}]
\p{Digit}   A decimal digit: [0-9]
\p{Alnum}   An alphanumeric character:[\p{Alpha}\p{Digit}]
\p{Punct}   Punctuation: One of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Graph}   A visible character: [\p{Alnum}\p{Punct}]
\p{Print}   A printable character: [\p{Graph}\x20]
\p{Blank}   A space or a tab: [ \t]
\p{Cntrl}   A control character: [\x00-\x1F\x7F]
\p{XDigit}  A hexadecimal digit: [0-9a-fA-F]
\p{Space}   A whitespace character: [ \t\n\x0B\f\r]

我认为 POSIX 也只允许 ASCII,我错了吗?这必须是一个副注,针对那些期望 POSIX 处理 Unicode 的用户。 - ahmet alp balkan
在Oracle上,他们通过遵循POSIX规范来实现他们的正则表达式风格。他们接受特殊类[= =]。不过我没有验证这个类是否适用于Oracle支持的各种语言环境。 - Stephan
Posix规范确实支持不同的语言环境,其中排序等价类在正则表达式的Posix规范第七点中有所描述:http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_03_05 - djhaskin987

2

引用自此处

Java不支持POSIX括号表达式,但使用\p运算符支持POSIX字符类。尽管\p语法借鉴了Unicode属性的语法,但Java中的POSIX类仅匹配如下所示的ASCII字符。类名区分大小写。与只能用于括号表达式内部的POSIX语法不同,Java的\p可以用于括号表达式内部和外部。


谢谢您的迅速回复,但是有没有办法使用某些语言环境? - Stephan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接