一、判断一个字符串是否是域名
/// <summary>
/// 验证字符串是否是域名
/// </summary>
/// <param name="str">指定字符串</param>
/// <returns></returns>
public static bool IsDomain(string str)
{
string pattern = @"^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$";
return IsMatch(pattern, str);
}
/// <summary>
/// 判断一个字符串,是否匹配指定的表达式(区分大小写的情况下)
/// </summary>
/// <param name="expression">正则表达式</param>
/// <param name="str">要匹配的字符串</param>
/// <returns></returns>
public static bool IsMatch(string expression, string str)
{
Regex reg = new Regex(expression);
if (string.IsNullOrEmpty(str))
return false;
return reg.IsMatch(str);
}
实例验证:
/// <summary>
/// 说明,目前不支持中文域名
/// </summary>
public static void TestOne()
{
Console.WriteLine(RegexHelper.IsDomain("baidu.com"));//true
Console.WriteLine(RegexHelper.IsDomain("m.baidu.com"));//true
Console.WriteLine(RegexHelper.IsDomain("m.bj.baidu.com"));//true
Console.WriteLine(RegexHelper.IsDomain("baidu.com."));//false
Console.WriteLine(RegexHelper.IsDomain("m.baidu.com.cn"));//true
Console.WriteLine(RegexHelper.IsDomain("m.百度.com"));//false
}
二、匹配字符串中的域名:
/// <summary>
/// 匹配获取字符串中所有的域名
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static List<string> MatchsDomain(string input)
{
string pattern = @"[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+";
return Matchs(input, pattern);
}
/// <summary>
/// 匹配结果 返回匹配结果的数组
/// </summary>
/// <param name="input"></param>
/// <param name="expression"></param>
/// <returns></returns>
public static List<string> Matchs(string input, string expression)
{
List<string> list = new List<string>();
MatchCollection collection = Regex.Matches(input, expression, RegexOptions.IgnoreCase | RegexOptions.Multiline);
foreach (Match item in collection)
{
if (item.Success)
{
list.Add(item.Value);
}
}
return list;
}
验证实例:
public static void TestTwo()
{
string source = "123.com zhidao.123.com www.123.com/q?ct=17&pn=0&tn zhidao.123.com/q?ct=17&pn=0&tn 123.com/q?ct=17&pn=0&tn 要求匹配出123.com 或者有可能是这样的有不是顶级域名的 www.123.com.cn zhidao.123.com.cn www.123.co...";
List<string> list = RegexHelper.MatchsDomain(source);
foreach (var item in list)
{
Console.WriteLine(item);
}
}
更多参考:http://blog.163.com/m13864039250_1/blog/static/21386524820161049745479/