Java Regex X {n,m} X,至少n次但不超过m次

时间:2014-12-12 12:00:42

标签: java regex

我试图了解如何将电子邮件地址与以下模式匹配:

      myEmail@something.any

任何应该在2,4个字符之间。

请在下面找到Java代码。我无法理解为什么它会返回true。谢谢!

public static void main(String[] args){

        String a = "daniel@gmail.com";
        String b = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.+-]+.[a-zA-Z]{2,4}";
        String c = "MyNameis1@abcx.comfff";
        Boolean b1 = c.matches(b);
        System.out.println(b1);
    }

OUTPUT:true

3 个答案:

答案 0 :(得分:4)

在正则表达式中,.匹配任何字符(换行符除外)。如果你想按字面意思匹配.,你需要逃避它:

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.+-]+\\.[a-zA-Z]{2,4}

这样更好,但仍然与MyNameis1@abcx.comf部分匹配。我们可以添加一个字符串锚点($)的结尾,以确保没有尾随不匹配的字符:

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.+-]+\\.[a-zA-Z]{2,4}$

答案 1 :(得分:0)

逃离.中的String b = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.+-]+.[a-zA-Z]{2,4}";。它是正则表达式中的一个特殊字符。

使用:String b = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.+-]+\\.[a-zA-Z]{2,4}";

答案 2 :(得分:0)

在你的表达中,dot表示任何角色。转义并确保没有字符跟随你的最小/最大字符检查后发布如下:

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.+-]+\\.[a-zA-Z]{2,4}$