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

时间:2016-12-28 06:20:24

标签: java regex

我看过几次讨论,但我没有看到任何有用的答案。我认为我的正则表达式应该有效。我已对其进行了测试http://regexr.com/http://www.regexplanet.com/advanced/java/index.html

应该有效。我正在研究一个简单的验证器POJO,它在设置成员变量之前验证字符串。

private static final String emailReg = "(.+(@).\\w+\\..\\w+)";
private final Pattern emailPattern = Pattern.compile(emailReg);

一个被调用的方法:

public boolean validateEmail( String Email ){

      Matcher m = emailPattern.matcher(Email);
      return m.matches();          
 }

这总是返回false。传递的值可以是any@any.any,但它始终返回false。我现在不关心'有效'的电子邮件,我只需要知道正则表达式字符串是否正确组装。从构建正则表达式的教程页面看来它是,但我的程序认为不是。

2 个答案:

答案 0 :(得分:0)

我建议:\\w+@\\w+\\.\\w+

这分解为:任意数量的单词字符" @"任何数量的单词字符"。"任意数量的单词字符。

您可以尝试,"coder123@stackoverflow.com"匹配,而"totally_invalid_email@%*.com"则不会。

我相信你的正则表达式拒绝一切的原因是因为你的代码中似乎有额外的. s。如果你想要any@any.any,那么在这种情况下".+@.+\\..+"将是正确的正则表达式。

有关java模式的更多信息,请参阅https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

答案 1 :(得分:-1)

我认为你的正则表达式存在一些问题。试试这个。

package com.java.demo;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmailValidator {

    public static void main(String[] args) {
        Pattern emailValidatorPattern = Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$",
                Pattern.CASE_INSENSITIVE);
        Matcher matcher = emailValidatorPattern.matcher("any@any.any");
        System.out.println(matcher.find());
    }

}

希望这会有所帮助。快乐的编码!