Bootstrap

匹配邮箱的正则表达式

邮箱的格式为<user>@<host>,其中:

  • <user>:由字母和数字组成的序列,每两个字符中间可以有’.’、’-‘或’_’。有效例子:“marry_green”、“m003”、“k.linda”、“k-linda”、“123”。无效例子:"-123"、"…"、"_linda"。
  • <host>:由至少两个单词组成的序列,每个单词之间要用’.‘分隔。没有单词是由字母组成的序列且每两个字母之间可以用’-'连接。有效例子:“qq.com”、“jlu-uni.com”、“jlu.edu.cn”。无效例子:“mail”、".com"、“invalid-”。

1.匹配<user>
由<user>的要求可知,第一个字符必须为字母或者数字因此为:([a-z]|[0-9])+
再分析要求可得出,从首字符开始往后,每个字符与前一个字符之间可以连接一个’.’、’-‘或’_’。经由分析可得:((\.|\-|_)?([a-z]|[0-9])+)*

即,<user>部分的正则表达式为:([a-z]|[0-9])+((\.|\-|_)?([a-z]|[0-9])+)*

2.匹配<host>
<host>部分可拆分为单词+(.+单词) 两部分。
而单词可拆分为字母+(-)(可选)+字母 ,因此:[a-z]+(\-?[a-z]+)*

即,<host>部分的正则表达式为:[a-z]+(\-?[a-z]+)*(\.[a-z]+(\-?[a-z]+)*)+

总结:([a-z]|[0-9])+((\.|\-|_)?([a-z]|[0-9])+)*@[a-z]+(\-?[a-z]+)*(\.[a-z]+(\-?[a-z]+)*)+


示例C#代码:

namespace Pro
{
    class Program
    {
        static void Main(string[] args)
        {
            string text;
            string user = @"([a-z]|[0-9])+((\.|\-|_)?([a-z]|[0-9])+)*";
            string host = @"[a-z]+(\-?[a-z]+)*(\.[a-z]+(\-?[a-z]+)*)+";
            string pattern = user + "@" + host;
            Regex regex = new Regex(pattern);
            Console.WriteLine("Please input the given text: ");
            text = Console.ReadLine();
            MatchCollection matches = regex.Matches(text);
            Console.WriteLine("\r\nOutput:");
            foreach (Match m in matches)
                Console.WriteLine(m.Groups[0]);
            Console.ReadKey();
        }
    }
}


运行结果:

;