有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我使用此模式检查字符串是否以冒号前面至少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)


共 (1) 个答案

  1. # 1 楼答案

    使用Java1.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());