我在C ++中使用以下正则表达式
std::regex base_regex("[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?");
它拒绝接受以下输入
email@subdomain.domain.com
在java和js中也一样。有人可以expalin
答案 0 :(得分:0)
我用vs2010和vs2015尝试了你的正则表达式。在vs2010中,比赛失败,2015年没有。所以我认为这是vs2010实施的一个错误。 如果你尝试一些不同的正则表达式:
std::regex base_regex("[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9]+\\.)+[A-Za-z0-9]+");
它有效。 我简化了表达方式。而不是:
[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?
我用过
[A-Za-z0-9]+
它并不相同,因为它在域/子域名的开头或结尾接受' - ',但也许它可能适合你。