+ -
当前位置:首页 → 问答吧 → 新手求分解域名=>(主机名 ,域名,后缀)完美正则-_-!

新手求分解域名=>(主机名 ,域名,后缀)完美正则-_-!

时间:2011-12-21

来源:互联网

将域名解析为 (主机名 ,域名,后缀)
例如:
www.baidu.com => ("www.","baidu",".com")
abc.baidu.com.cn => ("abc.","baidu",".com.cn")
baidu.com => ("www.","baidu",".com")
baidu.com.cn => ("www.","baidu",".com.cn")
www.wx.js.cn => ("www.","wx",".js.cn")
wx.js.cn => ("www.","wx",".js.cn")

后缀不单单.com .net .cn,而是要所有的可能形式.com.info.net.me.mobi.org.us.biz.xxx.ca.mx.tv.ws.com.ag.net.ag.org.ag.ag .js.cn 还有很多

我的正则:
([a-z0-9_-]{1,32}\.)+([a-z0-9_-]{1,32})((\.[a-z]{2,4})(.[a-z]{1,2})?)"

说明:
主机: ([a-z0-9_-]{1,32}\.)+
域名: ([a-z0-9_-]{1,32})
后缀: ((\.[a-z]{2,4})(.[a-z]{1,2})?)"

我的代码:
Python code

import re

def phraseDomainName(namestr):
    if namestr.count('''.''')<1:
        return False
    if namestr.count('''.''')==1:
        namestr="www."+namestr;    
    regex="([a-z0-9_-]{1,32}\.)+([a-z0-9_-]{1,32})((\.[a-z]{2,4})(.[a-z]{1,2})?)"
    match = re.search(regex,namestr)    
    if match.group(1)!= None:
        hostname=match.group(1)
    else:
        hostname=""            
    if match.group(2)!= None:
        domain=match.group(2)                 
    else:
        return False
    if match.group(3)!= None:
        suffix=match.group(3)       
    else:
        return False        
    return (hostname,domain,suffix)

while True:
    domain=input("input url:")
    print(phraseDomainName(domain))
input("end")



当前遇到wx.js.cn abc.com.cn 不能正确解析

作者: duojiawang   发布时间: 2011-12-21

前面没www的也要加上www吗

作者: xuzhijian17   发布时间: 2011-12-21

我加www.是为了域名的完整性,满足下面的判断。

例如abc.com wx.js.cn 需要加
我的代码只判断了只有一个点的情况加了"www."

作者: duojiawang   发布时间: 2011-12-21

加判断嘛,简单字符串处理就好,用正则貌似更乱了...

作者: angel_su   发布时间: 2011-12-21