Java正则表达式与预期不匹配

Java正则表达式与预期不匹配,java,regex,Java,Regex,我最近刚开始使用Java中的正则表达式,我不能完全理解这个问题 Pattern p = Pattern.compile("[^A-Z]+"); Matcher matcher = p.matcher("GETs"); if (matcher.matches()) { System.out.println("Matched."); } else { System.out.println(

我最近刚开始使用Java中的正则表达式,我不能完全理解这个问题

        Pattern p = Pattern.compile("[^A-Z]+");
        Matcher matcher = p.matcher("GETs");
        if (matcher.matches()) {
            System.out.println("Matched.");
        } else {
            System.out.println("Did not match.");
        }
结果:不匹配(意外结果)解释此问题

我得到的结果是“不匹配”。这对我来说很奇怪,在阅读时, 我使用的是X+,它匹配“一次或多次”

我想我的文字代码应该是这样的:

检查字符串“GETs”中是否有一个或多个字符不属于A到Z

因此,我期待以下结果:

是的,在“GETs”中有一个字符不属于A-Z,正则表达式是匹配的

然而事实并非如此,我不明白为什么会这样。 我尝试了以下方法:

        Pattern p = Pattern.compile("[A-Z]+");
        Matcher matcher = p.matcher("GETs");
        if (matcher.matches()) {
            System.out.println("Matched.");
        } else {
            System.out.println("Did not match.");
        }
结果:不匹配。(预期结果)

结果:匹配。(预期结果)


请解释为什么我的第一个示例不起作用。

您是第一个正则表达式要求匹配任何不在大写A-Z范围内的字符的人。匹配在GETs中的小写“s”上

仅当整个区域 与模式匹配

对于要查找的输出,请改用


每种情况的解释: 失败,因为整个区域
'get'
不是小写


这会失败,因为整个区域
'get'
不是大写的



整个区域
'GET'
是大写的,模式匹配。

如果希望正则表达式以大写和小写形式匹配,可以使用以下命令:
String test=“是”;
String test2=“是”;
test.matches((?i.*\\byes\\b.*);
test2.匹配((?i.*\\byes\\b.*)


在这两种情况下都将返回true

是的,抱歉写错了。不确定是否有反对票。不过,我已经尽力为您提供了一个合适的答案……:)这是一个重复。那不是真的,它清楚地说匹配一次或多次?这适用于
匹配器。匹配
,而不是
模式。匹配
@Pineda实际上也匹配正则表达式,与整个字符串匹配。我仍然不明白,根据网站:“X+X,一次或多次”@Shashwat:是的:-)是的,但是为什么不匹配呢?因为你试图匹配整个单词。是的,但是为什么第二个不匹配呢?这是一样的。第二种模式是询问整个单词get是否只有大写字母A-Z范围[^A-Z]+:没有大写字母A-Z[^A-Za-Z]+:没有大写字母A-Z或A-Z的
        Pattern p = Pattern.compile("[A-Z]+");
        Matcher matcher = p.matcher("GET");
        if (matcher.matches()) {
            System.out.println("Matched.");
        } else {
            System.out.println("Did not match.");
        }
Pattern p = Pattern.compile("[^A-Z]+");
Matcher matcher = p.matcher("GETs");
  if (matcher.matches()) {
Pattern p = Pattern.compile("[A-Z]+");
Matcher matcher = p.matcher("GETs");
  if (matcher.matches()) {
Pattern p = Pattern.compile("[A-Z]+");
Matcher matcher = p.matcher("GET");
  if (matcher.matches()) {