Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于将电子邮件地址匹配到域的正则表达式_C#_Regex - Fatal编程技术网

C# 用于将电子邮件地址匹配到域的正则表达式

C# 用于将电子邮件地址匹配到域的正则表达式,c#,regex,C#,Regex,假设我有 domain.com sub.domain.com *.com *.domain.com sub.*.com 鉴于我将有电子邮件地址的格式 user@domain.com user@sub.domain.com 是否可以创建1个正则表达式模式来查找电子邮件地址是否与某个域模式匹配?在这种情况下,*.com包含所有其他模式。你可以查看电子邮件endwith.com是否足够 List<string> emails = new List<string>

假设我有

domain.com
sub.domain.com
*.com
*.domain.com
sub.*.com
鉴于我将有电子邮件地址的格式

user@domain.com
user@sub.domain.com

是否可以创建1个正则表达式模式来查找电子邮件地址是否与某个域模式匹配?

在这种情况下,*.com包含所有其他模式。你可以查看电子邮件endwith.com是否足够

List<string> emails = new List<string>
                      {
                          "a@domain.com",
                          "a@sub.domain.com",
                          "a@asd.com",
                          "a@.sub.asdas.com",
                          "a@.sub.asdas.com",
                      };

Regex regex = new Regex(@"(domain\.com)|(sub\.*\.com)");

emails= emails.Where(e => regex.IsMatch(e)).ToList();
试试这个正则表达式:

^[a-zA-Z0-9+-]+:?:[a-zA-Z0-9-]+.?[a-zA-Z]+.?提供者1 |提供者2.域1 |域2$

使用以下示例尝试此正则表达式:abc123@provider1.domain1-有效

带有子域的电子邮件的正则表达式:

^[a-zA-Z0-9+-]+:?:[a-zA-Z0-9-]+.?[a-zA-Z]+.?子1 |子2.提供者1 |提供者2.域1 |域2$


它将与任何域和邮件服务提供商合作。我已经试过了,它很有效,你不需要正则表达式。可以使用linq执行以下操作:

            string[] domains = { "*.sub.domain.com", "*.com", "*.domain.com", "sub.*.com" };

            string email = "abc.sub.domain.com";
            string user = "abc";

            bool match = domains.Any(x => x.Replace("*", user) == email);

我最终还是同意了

myPattern.Replace("*", myPattern.StartsWith("*") ? "@[A-Za-z0-9]+" : "[A-Za-z0-9]+");
*.com将包括所有其他DOAMIN。那么,为什么要检查其他域呢?
myPattern.Replace("*", myPattern.StartsWith("*") ? "@[A-Za-z0-9]+" : "[A-Za-z0-9]+");