PHP正则匹配网址(URL)中主域名写法

在web开发中很多时候要获取一域名信息,特别是在一些数据分析采集过程中;域名信息多样,有主域名,有二级域名、三级域名、、、有相似类型的如:.com、.com.cn,如何正确分析出字符中网址url的主域名了?下面是是个人工作中专结出来的:

有一个字符串,我们要匹配出其中的包含的主域名信息,举例如下:

$url='天气预报15天查询网址:http://tqybw.net/,请在家收藏';

preg_match('/[\w][\w-]*\.(?:com\.cn|com|cn|co|net|org|gov|cc|biz|info)(\/|$)/isU', $url, $domain);
echo $domain[0];

上面将输出:tqybw.net

注意:正则中 (?:com\.cn|com|cn|co|net|org|gov|cc|biz|info)域名后辍较长的要放在前面,如:com.cn应放在.com、.cn的前面否则容易匹配出错;

[\w][\ w-]*\.
这个应该能明白吧,就匙匹配以字母、数字、下划线开头,并且后面为字母、数字、下划线或减号加上点组成d字符串
其实最好应该匙[a-z0-9][\a-z0-9-]*\. 因为合法d域名只能以字母、数字开头,后面可以用减号连接,但匙不允许有下划线。

(?:com\.cn|com|cn|co|net|org|gov|cc|biz|info)(\/|$) 域名类型
(\/|$) 表示结尾为域名类型加上/或者域名类型的字符串
例如下面两种情况:
http://tqybw.net/ditu/
http://tqybw.net

复杂二级域名匹配:
有一个二级域名:http://15tianqi.xiamen.gov.cn.tqybw.net/,其二级域名名称(15tianqi.xiamen.gov.cn)本身就是符合域名规则,但我们要匹配出直实域名tqybw.net,是怎么写了?
其实写法是一样的,因为这个正则是从末端开始匹配的!

你可能感兴趣的:(php正则)