当前位置: 首页 > 面试题库 >

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

潘阳舒
2023-03-14
问题内容

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


问题答案:

使用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个字母字符开头: 但是我遇到了以下异常: 即使Pattern类的规范指出: 与IsAlphabetic中一样,二进制属性以前缀Is指定。Pattern支持的二进制属性是 字母顺序 表意文字 信 … 以及 Unicode脚本,块,类别和二进制属性 列表的类部分 问题答案: 使用Java 1.8工作并返回true。 请注意,Java 1.7中

  • 问题内容: 原始数据是: 我想匹配一条线,但是不能使用 但是,我可以使用match 。 我该如何搭配 问题答案: 默认情况下,和分别匹配输入的开始和结束。您需要使用启用多行模式,这会导致并匹配行的开始和结束: 演示: 产生以下输出: 编辑我 没有任何匹配的事实是因为默认情况下,和不匹配。如果您通过启用了DOT-ALL ,也使匹配了它们,那么您将看到整个输入字符串都被匹配了: 编辑二 在这种情况下,

  • 问题内容: 示例字符串: 我想先进行匹配,然后将其替换为一些文本,以使字符串变为,然后进行匹配。 问题答案: 令人讨厌的是,Javascript没有提供PCRE递归参数,因此要处理嵌套问题远非易事。但是可以做到的。

  • 问题内容: 当字符串以数字开头时,我需要匹配,然后是一个点,然后是一个空格和1个或多个大写字符。匹配必须发生在字符串的开头。我有以下字符串。 我尝试过的正则表达式是: 它不匹配。一个有效的正则表达式将对这个问题有什么作用? 问题答案: (对不起,我先前的错误。大脑现在坚定地投入了。嗯,也许。) 这有效: 分解: =字符串开头 =一个或多个数字 (之所以转义,是因为它在字符串中,因此) =文字(或者

  • 问题内容: 我从以下格式的文件中获取输入: 现在,我想在我的Java代码中读取int1,int2,int3和int4。我该如何在Java中使用正则表达式匹配。谢谢。 问题答案: 为了避免空值:

  • 问题内容: 我想匹配这样的电话号码,它应该有3位数字(000,666除外)以及900-999之间的任何数字,然后是-然后是2位数字,然后是- 然后是4位数字。例如:123-75-3456是数学000- 23-3452不是匹配项(否000)915-23-4534不是匹配项(大于900)有人可以帮忙吗?抱歉,忘记添加我尝试的内容,[0-9 && ^ [000,666,[900-999]] {3}-[0