gpt4 book ai didi

C++ 正则表达式捕获正在删除电子邮件验证器中的最后一个字符

转载 作者:行者123 更新时间:2023-12-02 09:58:19 24 4
gpt4 key购买 nike

C++ Shell 在线执行链接:http://cpp.sh/5z2uq
我正在编写一个正则表达式来验证 的电子邮件 ID可以有多个点和加号在其本地名称中,并且在域名中只能有一个点。
我现在面临的问题是在捕获组中。我的域名捕获,即第 2 组按预期工作,如输出所示。
但是,当我 try catch 本地名称,即组 #1 时,
它不应该捕获任何超出“+”符号的内容,不包括“+” ,并在捕获本地名称后,输出缺少最后一个字符。
请看一下我的 C++ 正则表达式代码:

#include <iostream>
#include <regex>
using namespace std;
int main()
{
string str;
vector<string> emails = {
"local@domain.com",
"local.constant@domain.com",
"local+addon@domain.com",
"local.constant+addon@domain.com",
"local@domain.c.o.m"
};

for(auto ele : emails)
{
str = ele;

regex e("([\\w+\\.]+)\\+*[\\+\\w]+\\@([\\w]+\\.[\\w]+)$");
smatch parts;
bool match = regex_match(str,parts,e);

if(match==true)
{
cout << "Local : " << parts.str(1) << endl;
cout << "Domain : " << parts.str(2) << endl;
cout << "Valid Email ID: " << ele << endl << endl;
}
else
{
cout << "Invalid Email ID: " << ele << endl << endl;
}
}

return 0;
}

Output:

Local : loca
Domain : domain.com
Valid Email ID:local@domain.com

Local : local.constan
Domain : domain.com
Valid EmailID: local.constant@domain.com

Local : local+addo
Domain : domain.com
Valid Email ID:local+addon@domain.com

Local : local.constant+addo
Domain : domain.com
ValidEmail ID: local.constant+addon@domain.com

Invalid Email ID: local@domain.c.o.m


请注意,在局部变量中,我的正则表达式组捕获如何删除最后一个字符。
问题:
  • 如何分组捕获直到“+”号
  • 如何使组捕获不丢弃最后一个字符?
  • 最佳答案

    你可以使用这个表达式:

    "([\\w.]+)(?:\\+[\\w]+)*\\@([\\w]+\\.[\\w]+)$"
    第一部分 ([\\w.]+)匹配本地部分(即任何单词字符或点)
    第二部分 (?:\\+[\\w]+)*表示重复 0 次或多次的非捕获组(匹配一个加号后跟一个或多个单词字符)。
    第三部分 \\@匹配 @ 字符。
    最后一部分 ([\\w]+\\.[\\w]+)匹配域部分(即用一个点分隔的两个单词),你做对了。

    关于C++ 正则表达式捕获正在删除电子邮件验证器中的最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64128201/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com