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

combinig regex partly using | not working c++

本文关键字:不起作用 C++ 正则表达式部 组合      更新时间:2023-10-16

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

^[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(当然不是真实的(时,它给出了 false。 不过,它确实适用于其他情况,例如 zohal@gmail.com。

您可以使用

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

查看正则表达式演示

  • ^- 字符串的开头
  • [A-Za-z0-9._]+- 1 个或多个字母、数字、._
  • @-@
  • [A-Za-z0-9]+- 1 个或多个字母或数字
  • (?:.[A-Za-z0-9]+)+- 出现 1 个或多次点,然后出现 1 个或多个字母或数字
  • $- 字符串位置的结尾。

由于@后有两个+量化模式,因此您不需要明确的(?=(?:[^A-Za-z0-9]*[A-Za-z0-9]){2})前瞻来要求至少两个字母或数字。