微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

解决方法

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

即使Pattern类的规范指出:

与IsAlphabetic中一样,二进制属性以前缀Is指定。Pattern支持的二进制属性是

  • 字母顺序
  • 表意文字

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。