RegEx不适用于C ++中的所有输入

时间:2016-07-05 09:20:42

标签: c++ regex

我在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

1 个答案:

答案 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]+

它并不相同,因为它在域/子域名的开头或结尾接受' - ',但也许它可能适合你。