Matcher正则表达式不匹配模式

时间:2015-01-03 16:21:54

标签: java regex pattern-matching

我创建了一个方法,我希望在一个set字符串中找到@ gmail.com,测试传入例如stackoverflow@gmail.com,该方法返回false。

我已经搜索了但是我不确定我错过了什么,因为我正在使用.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;
}

}

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

你需要的正则表达式是:

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

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

答案 2 :(得分:-1)

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

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