DNS规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母。标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的域名写在最右边。由多个标号组成的完整域名总共不超过255个字符。
由此匹配完整域名的正则表达式:
^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$
例如:baidu.com
匹配网址:
^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*$
例如:
匹配http url:
^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*([\?&]\w+=\w*)*$
例如: ?q=1&m=test
string url = "https://www.baidu.com/s?tn=80035161_2_dg&wd=c%23%E6%AD%A3%E5%88%99"; string pattern = @"^(http(s)?://)";//协议 $1=@"http(s)?://" $2=@"(s)?" pattern += @"()?";//协议 $3=@"()?"; pattern += @"(([a-zA-z0-9][-a-zA-z0-9]{0,62})";//域名 $5 pattern += @"(\.[a-zA-z0-9][-a-zA-z0-9]{0,62})+)";//域名 $6 pattern += @"(:\d+)*";//端口号 $7 Regex reg = new Regex(pattern); GroupCollection matches = reg.Match(url).Groups; string result = ""; if (matches.Count >5) { result = matches[4].Value; }