邮箱的格式为<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();
}
}
}
运行结果: