再补充一下, 
子域名的级数是未知的,也就是有可能是二级子域名,也有可能是三级域名。 也可能是更多。 并且域名的后缀也是未知的,有可能是.com也有可能是.com.cn 也有可能是.net  后缀也不仅仅只是.com或.net,全世界好像有300多个后缀吧,也是未知的。

解决方案 »

  1.   

    $_validTlds = array(
            'ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao',
            'aq', 'ar', 'arpa', 'as', 'asia', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb',
            'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'biz', 'bj', 'bm', 'bn', 'bo',
            'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cat', 'cc', 'cd',
            'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'com', 'coop',
            'cr', 'cu', 'cv', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do',
            'dz', 'ec', 'edu', 'ee', 'eg', 'er', 'es', 'et', 'eu', 'fi', 'fj',
            'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh',
            'gi', 'gl', 'gm', 'gn', 'gov', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu',
            'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il',
            'im', 'in', 'info', 'int', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm',
            'jo', 'jobs', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw',
            'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu',
            'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mg', 'mh', 'mil', 'mk', 'ml', 'mm',
            'mn', 'mo', 'mobi', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv',
            'mw', 'mx', 'my', 'mz', 'na', 'name', 'nc', 'ne', 'net', 'nf', 'ng',
            'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'org', 'pa', 'pe',
            'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'pro', 'ps', 'pt',
            'pw', 'py', 'qa', 're', 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd',
            'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr',
            'st', 'su', 'sv', 'sy', 'sz', 'tc', 'td', 'tel', 'tf', 'tg', 'th', 'tj',
            'tk', 'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'travel', 'tt', 'tv', 'tw',
            'tz', 'ua', 'ug', 'uk', 'um', 'us', 'uy', 'uz', 'va', 'vc', 've',
            'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'yt', 'yu', 'za', 'zm',
            'zw'
            );
    来源于Zend_Validate_Hostname 俺看差不多 究竟怎么匹配就是相对容易的事了
    这是顶级域名 .com.cn 判断下第二个是不是在这个范围中就应该可以了
      

  2.   

    突然想起个有意思的域名 www.net.cn 万网的 看起来很牛X 确实很牛X www域名 net.cn是后缀 
      

  3.   

    还是应该把所有的后缀列出来...不过域名的规则是从后向前递归查询dns,查到后访问...比如www.aaa.com.cn假设在万网注册的,主dns设置为dns23.hichina.com 
    那么访问的时候是要先搜索.cn的dns服务器里面有没有www.aaa.com.cn的记录(一般来讲是没有,会返回.com.cn的dns服务器)
    没有的话要搜索.com.cn的服务器里面有没有记录(这时候返回dns23.hichina.com)
    然后dns23.hichina.com返回www.aaa.com.cn的IP
    然后才转向那个IP从规则上面来看的话,似乎根本没有后缀那种东西...写程序的话,只能抽象的模拟一下了...LZ写完了,写成个class 发上来共享一下吧...帮你找bug
      

  4.   


    preg_match("/([[:alnum:]-]+\.)+([[:alnum:]-]+\.(net|com|biz)(\.[[:alpha:]]+){0,1})/",$text,$matches);
            echo $matches[2];
      

  5.   

    preg_match("/([[:alnum:]-]+\.)+([[:alnum:]-]+(\.(net ¦com ¦biz|org))?(\.[[:alpha:]]+){0,1})/",$text,$matches); 
            echo $matches[2];
    对于标准的数据应该可以应付了。
      

  6.   

    preg_match("/([[:alnum:]-]+\.)+([[:alnum:]-]+\.(net ¦com ¦biz)(\.[[:alpha:]]+){0,1})/",$text,$matches); 
            echo $matches[2];
    提取net.cn,com这样的域名
    preg_match("/([[:alnum:]-]+\.)+(?!com|net|org|biz)([[:alnum:]-]+\.[[:alpha:]]+)[^[:alpha:]-\.]/",$text,$matches); 
            echo $matches[2];
    提取som.cn这样的域名。
      

  7.   


    <?php
    $url = "aa.bb.cc.sina.com";
    $reg = "/.*\.(.+?)\.(.+?)$/";
    preg_match($reg,$url,$matches);
    echo $matches[1];
    ?>
      

  8.   

    我来迟了,我也是冲着同样的问题来找答案的。答案没找到。经过自己努力,基本解决了,发上来共享一下,希望能对后来者有帮助。
    <?php
    $host=$_REQUEST['host'];
    preg_match("/[^\.\/]+\.([^\.\/]+(\.(com|net|org|gov|edu)\.cn)?)$/i", $host, $matches);
    if(substr_count($matches[1],".")>0) $true_domain=$matches[1]; else $true_domain=$matches[0];
    echo "domain name is: {$true_domain}\n";
    ?>