如何在Java正则表达式匹配中使用IsAlphabetic二进制属性?

我正在使用此模式检查字符串是否以冒号前面至少2个字母字符开头:

string.matches("^\\p{IsAlphabetic}{2,}:") 

但我得到以下exception:

 java.util.regex.PatternSyntaxException: Unknown character property name {Alphabetic} near index 16 ^\p{IsAlphabetic}{2,}: ^ at java.util.regex.Pattern.error(Pattern.java:1730) at java.util.regex.Pattern.charPropertyNodeFor(Pattern.java:2454) at java.util.regex.Pattern.family(Pattern.java:2429) at java.util.regex.Pattern.sequence(Pattern.java:1848) at java.util.regex.Pattern.expr(Pattern.java:1769) at java.util.regex.Pattern.compile(Pattern.java:1477) at java.util.regex.Pattern.(Pattern.java:1150) at java.util.regex.Pattern.compile(Pattern.java:840) at java.util.regex.Pattern.matches(Pattern.java:945) at java.lang.String.matches(String.java:2102) 

即使Pattern类的规范声明:

二进制属性使用前缀Is指定,如IsAlphabetic中所示。 Pattern支持的二进制属性是

  • 拼音
  • 表意的
  • 信件

Unicode脚本,块,类别和二进制属性列表的类

\p{IsAlphabetic} An alphabetic character (binary property)

使用java 1.8工作并返回true。

 String s = "äö:"; System.out.println(s.matches("^\\p{IsAlphanumeric}{2,}:")); 

请注意,Java 1.7中可用的表单 – Alpha,IsAlpha – 不一定包含不是US-ASCII的字符。 这返回false:

 String s = "äö:"; System.out.println(s.matches("^\\p{IsAlpha}{2,}:")); 

但请注意,这适用于1.7并返回true:

 String s = "äö:"; Pattern pat = Pattern.compile( "^\\p{Alpha}{2,}:", Pattern.UNICODE_CHARACTER_CLASS ); Matcher mat = pat.matcher( s ); System.out.println(mat.matches());