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

How do I use the IsAlphabetic binary property in a Java regex match?

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

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

但我收到以下异常:

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.<init>(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)

尽管模式规范 类 指出:

Binary properties are specified with the prefix Is, as in IsAlphabetic. The supported binary properties by Pattern are

  • Alphabetic
  • Ideographic
  • Letter
  • ...

以及用于 Unicode 脚本、块、类别和二进制属性的部分 列出

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

使用 java 1.8 有效 returns 正确。

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

请注意,Java 1.7 - Alpha、IsAlpha - 中可用的形式不一定包含不在 US-ASCII 中的字符。这 returns 错误:

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

但请注意,这在 1.7 和 returns 中有效:

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