匹配器正则表达式不匹配模式

Matcher regex not matching pattern

我创建了一个方法,我希望在一组字符串中找到@gmail.com,并通过测试传入例如 Whosebug@gmail.com 方法 returns false。

我已经搜索过了,但不确定我遗漏了什么,因为我正在使用 .matches() 是否需要 matches.find()?

public final static boolean isGmail(String s) {

    Pattern pattern = Pattern.compile("(\W|^)[\w.+\-]*@gmail.com(\W|$)");
    System.out.println(pattern + "            pp  ");
    Matcher m = pattern.matcher(s);
    System.out.println(m + "            pp  ");
    boolean b = m.matches();
    System.out.println(b + "            pp  ");
    return b;
}

}

我对正则表达式很陌生,所以这可能是我接受的问题。

你不需要为此使用正则表达式,你可以这样做

public final static boolean isGmail(String s) {
    return s.indexOf("@gmail.com") > -1;
}

如果您想在字符串中查找“@gmail.com”,您应该使用 find() 方法来实现正确的行为。

match() 和 find() 之间的区别在于,match() 方法尝试将测试字符串的整个区域 与模式进行匹配,而 find() 尝试找到与模式匹配的测试字符串的 下一个子序列 (参见 https://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html)。希望对你有帮助。

您需要的正则表达式是:

[A-Z0-9._%+-]+@gmail\.com

public final static boolean isGmail(String s) {
    return s.matches("(?i).*?[A-Z0-9._%+-]+@gmail\.com.*");
}