部分使用不工作C++的正则表达式组合

部分使用不工作C++的正则表达式组合,c++,regex,C++,Regex,这将是电子邮件地址的正则表达式。 用户名:大写和小写字母、数字、下划线和点 ^[A-Za-z0-9._]+ 还有@和域:大写字母、小写字母和数字 @[A-Za-z0-9]+ 还有点和tld:至少2个字符、字母和数字,最多可以有一个点。 我过去至少有2个字符,最多有一个点: ([A-Za-z0-9]{2,}|[.]{0,1}) 所以完整的正则表达式是: regex reg ("^[A-Za-z0-9._]+@[A-Za-z0-9]+\\.([A-Za-z0-9]{2,}|[.]{0,1})$

这将是电子邮件地址的正则表达式。 用户名:大写和小写字母、数字、下划线和点

^[A-Za-z0-9._]+
还有@和域:大写字母、小写字母和数字

@[A-Za-z0-9]+
还有点和tld:至少2个字符、字母和数字,最多可以有一个点。 我过去至少有2个字符,最多有一个点:

([A-Za-z0-9]{2,}|[.]{0,1})
所以完整的正则表达式是:

regex reg ("^[A-Za-z0-9._]+@[A-Za-z0-9]+\\.([A-Za-z0-9]{2,}|[.]{0,1})$");
但是最大一点规则不起作用。当我输入zohal@gmail.df.g不是真的,当然是假的。在其他情况下,如zohal@gmail.com尽管如此。

您可以使用

regex reg(R"(^[A-Za-z0-9._]+@[A-Za-z0-9]+(?:\.[A-Za-z0-9]+)+$)")

细节

^-字符串的开头 [A-Za-z0-9.+-1个或多个字母、数字、。或_ @-a@char [A-Za-z0-9]+-1个或多个字母或数字 ?:\[A-Za-z0-9]++-1个或多个点,然后是1个或多个字母或数字 $-字符串结束位置。
因为@之后有两个+量化模式,所以您不需要显式的?=?:[^A-Za-z0-9]*[A-Za-z0-9]{2}向前看至少需要两个字母或数字。

尝试regex regR^[A-Za-z0-9.+=?:[^A-Za-z0-9]*[A-Za-z0-9]{2}[A-Za-z0-9]+:\.[[A-Za-z0-z0-9]++.-.[[A-Za-z0-9]++-.[[A-Za-z0-z0-9]+-]看到了吗?.@Torstriew.@zohal@gmail这是不可取的。所以它应该是:R^[A-Za-z0-9.+@?:[^A-Za-z0-9]*[A-Za-z0-9]{2}[A-Za-z0-9]+?:\[A-Za-z0-9]++$