我正在使用我在How to validate an email找到的电子邮件验证模式,除了在电子邮件的第一部分中允许+
并且在我的规范中不允许时,它工作正常。原始代码是
public static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
protected boolean isInvalidEmail(String email) {
pattern = Pattern.compile(EMAIL_PATTERN);
matcher = pattern.matcher(email);
return !matcher.matches();
}
我以为我可以从+
删除"^[_A-Za-z0-9-\\+]
,但我得到Pattern Syntax Exception: Unclosed Character Class
。有人可以告诉我为什么删除+
取消课程?谢谢!
答案 0 :(得分:2)
您必须删除\\+
部分。
\\
转义\
字符。 \+
转义+
正则表达式运算符。因此\\+
分解为\+
,这意味着匹配文字+
字符。
注意: +
正则表达式运算符表示匹配前面一个或多个元素。
答案 1 :(得分:2)
它为您提供Unclosed Character Class
的原因是因为仅删除+
现在会转义结束方括号,因此它被视为模式的一部分。因此,该类没有匹配的结束方括号。正如Jonny Henly所提到的,解决方案是删除\\+
以符合您的规范,但这给出了为什么它是未闭合的答案。