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

Lud*_*g W 1 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("Did not match.");
        }
Run Code Online (Sandbox Code Playgroud)

结果:未匹配(意外结果)说明这一点

我得到输出"不匹配." 这对我来说很奇怪,在阅读https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html时,我正在使用X +,它匹配"一个或多个倍".

我以为我的代码用语言会是这样的:

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

所以我期待以下结果:

"是的,在"GETs"中有一个不属于AZ的角色,正则表达式是一场比赛."

然而事实并非如此,我很困惑为什么会这样.我尝试了以下方法:

        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.");
        }
Run Code Online (Sandbox Code Playgroud)

结果:不匹配.(预期结果)

        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.");
        }
Run Code Online (Sandbox Code Playgroud)

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

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

Pin*_*eda 6

Matcher.matchestrue仅当ENTIRE区域 与模式匹配时才返回.

对于您正在寻找的输出,请Matches.find改用


每个案例的解释:

Pattern p = Pattern.compile("[^A-Z]+");
Matcher matcher = p.matcher("GETs");
  if (matcher.matches()) {
Run Code Online (Sandbox Code Playgroud)

因为整个区域 'GETs'不是小写而失败


Pattern p = Pattern.compile("[A-Z]+");
Matcher matcher = p.matcher("GETs");
  if (matcher.matches()) {
Run Code Online (Sandbox Code Playgroud)

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


Pattern p = Pattern.compile("[A-Z]+");
Matcher matcher = p.matcher("GET");
  if (matcher.matches()) {
Run Code Online (Sandbox Code Playgroud)

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