java - 这个模式有什么问题: Pattern.编译("\\p{Upper}{4}")

标签 java regex

我正在编写一个与由 4 个大写字母组成的 String 匹配的 Pattern

例如:

  • “AAAA”
  • “ABCD”
  • “ZZZZ”

...都是正确的匹配,而:

  • “1DFG”
  • “!@#$”
  • “1234”

...应该匹配。

在下面找到我的代码。

它在“AAAA”上不断返回false

有人可以解释一下吗?

public static boolean checkSettings(String str) {
    Pattern p = Pattern.compile("\\p{Upper}{4}");
    Matcher m = p.matcher("%str".format(str));
    if (m.matches()) {
        return true;
    } else {
        // System.exit(1)
        return false;
    }
}

最佳答案

我认为您的Pattern没有任何问题,可能您的输入String有问题。

举个例子:

Pattern p = Pattern.compile("\\p{Upper}{4}");
Matcher m = p.matcher("%str".format("AAAA"));
System.out.println(m.find());

输出:

true

警告

\\p{Upper}{4}\\P{Upper}{4} 相同模式,而是一个相反的模式。

第二个实例否定 4 个大写字符(请参阅大写“P”)。我指出这一点是因为您的问题标题表明了错误的模式

最后说明

如果您只打算在 Pattern 中使用 ASCII 字母字符,您可能需要使用 [A-Z] (此处大写字母很重要),正如其他人提到的在这个线程中。它与 \\p{Upper} 完全相同。

\\p{Lu} 略有不同,它将匹配 Unicode category为大写字母。

关于java - 这个模式有什么问题: Pattern.编译("\\p{Upper}{4}"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19023393/

相关文章:

java token 语法错误 "(", ;预期的

java - 多线程读取Java文件

javascript - 如何查看 url 是否仅限移动设备

java - Java中读取文本文件到int数组

java - Spring @DataJpaTest 抛出未知实体异常

java - 在引用变量上调用方法与在新对象上调用方法

ruby - 使用正则表达式从数据集中提取数据

javascript - 用于接受带有tone char(') 的希腊字符的正则表达式

java - 使用 java 的 XSLT 1.0 中的正则表达式

c++ - 给定一个正则表达式,我将如何生成匹配它的所有字符串?