求php高手来帮忙,判断主机名最后一个字符为国家简称 本帖最后由 kwdpx 于 2013-07-05 19:05:08 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不就是去掉主机名吗?$a = array( 'www.abc.com', 'www.abc.com.cn', 'www.abc.cn', 'www.abc.us',);foreach($a as $host) { echo $host . ' --> '. explode('.', $host, 2)[1] . "\n";}www.abc.com --> abc.comwww.abc.com.cn --> abc.com.cnwww.abc.cn --> abc.cnwww.abc.us --> abc.us 1.检测最后一个.xx是什么不就得了?2.tv记忆中也是一个国别,只是这个是小国,他们不怎么需要互联网,就把国别域名授权给了商业公司而已,不知有否记错 楼主啊,哪有这么简单啊,还有类似的:www2.abc.com.cnwww3.abc.com.cnxx.xx.abc.com.cnwww2.abc.cnwww3.abc.cnxx.xx.abc.cnwww2.abc.uswww3.abc.usxx.xx.abc.us等所以想在原代码基本上,再增加判断:国家简称为:af|aq|at|au|be|bg|br|ca|ch|cl|cn|de|eg|es|fi|fr|gr|hk|hu|ie|il|in|iq|ir|is|it|jp|kr|mx|nl|no|nz|pe|ph|pr|pt|ru|se|sg|th|tr|tw|uk|us|za/'时前一段是否为com或net。如果前一段是com或net就取三位,如果不是,就取二位。 高手请帮忙:思路是这样的,但不能正确得到,请帮改正,谢谢:$splitresult=preg_split("/\./",$host); //用"."分割主机名//判断主机名最后一个字符为国家简称,若是,则输出后三个字段,若否,则输出后两个$countsplit=count($splitresult); //数组中最大元素数$pattern2='/af|aq|at|au|be|bg|br|ca|ch|cl|cn|de|eg|es|fi|fr|gr|hk|hu|ie|il|in|iq|ir|is|it|jp|kr|mx|nl|no|nz|pe|ph|pr|pt|ru|se|sg|th|tr|tw|uk|us|za/'; //国家简称$pattern3='/com|net/'; //国际简称if (preg_match($pattern2,$splitresult[$countsplit-1])){$matchesurl="".$splitresult[$countsplit-2].".".$splitresult[$countsplit-1];}elseif ((preg_match($pattern2,$splitresult[$countsplit-1]))||(preg_match($pattern3,$splitresult[$countsplit-2]))){$matchesurl="".$splitresult[$countsplit-3].".".$splitresult[$countsplit-2].".".$splitresult[$countsplit-1];}else{$matchesurl="".$splitresult[$countsplit-2].".".$splitresult[$countsplit-1];}$matchesurl=ltrim("$matchesurl", "."); 域名是国际互联网组织管理的,不是你想怎么写就怎么写的有关域名的知识可见 http://baike.baidu.com/view/43.htm 我就不刺激你了就按你的想法,可以写作$s =<<< TXTwww2.abc.com.cnwww3.abc.com.cnxx.xx.abc.com.cnwww2.abc.cnwww3.abc.cnxx.xx.abc.cnwww2.abc.uswww3.abc.usxx.xx.abc.usTXT;$a = preg_split("/[\r\n]+/", $s); //待识别域名$g = explode('|', 'af|aq|at|au|be|bg|br|ca|ch|cl|cn|de|eg|es|fi|fr|gr|hk|hu|ie|il|in|iq|ir|is|it|jp|kr|mx|nl|no|nz|pe|ph|pr|pt|ru|se|sg|th|tr|tw|uk|us|za'); //允许的国家域名$j = array('com', 'net'); //允许的机构名foreach($a as $r) { echo "$r ==> "; $n = 0; $h = array_slice(explode('.', $r), 1); //去掉主机名 if(array_intersect($g, $h)) $n++; if(array_intersect($j, $h)) $n++; if($n) echo join('.', array_slice($h, -($n+1))); echo PHP_EOL;}www2.abc.com.cn ==> abc.com.cnwww3.abc.com.cn ==> abc.com.cnxx.xx.abc.com.cn ==> abc.com.cnwww2.abc.cn ==> abc.cnwww3.abc.cn ==> abc.cnxx.xx.abc.cn ==> abc.cnwww2.abc.us ==> abc.uswww3.abc.us ==> abc.usxx.xx.abc.us ==> abc.us 小白求救 大家对Python Web开发有什么看法~~ 正则问题 登陆成功后,把登陆表单隐藏掉,换成个人信息 sql语句在查询分析器中可以运行,php的mssql_query却报错: 关于数据绑定的问题,急 求PHP网站源代码下载 请问一个很简单的问题,有关sql语句:) 如何获取下拉列表选定的值? 还是路径问题,搜来半天找不到结果,我看还是得送分给大家 标点不好有问题帮忙看看 我实在看不出来 PHP 如何把这个页面接收的POST或者GET 转移到下一个页面
'www.abc.com',
'www.abc.com.cn',
'www.abc.cn',
'www.abc.us',
);
foreach($a as $host) {
echo $host . ' --> '. explode('.', $host, 2)[1] . "\n";
}www.abc.com --> abc.com
www.abc.com.cn --> abc.com.cn
www.abc.cn --> abc.cn
www.abc.us --> abc.us
楼主啊,哪有这么简单啊,还有类似的:
www2.abc.com.cn
www3.abc.com.cn
xx.xx.abc.com.cnwww2.abc.cn
www3.abc.cn
xx.xx.abc.cnwww2.abc.us
www3.abc.us
xx.xx.abc.us
等所以想在原代码基本上,再增加判断:
国家简称为:af|aq|at|au|be|bg|br|ca|ch|cl|cn|de|eg|es|fi|fr|gr|hk|hu|ie|il|in|iq|ir|is|it|jp|kr|mx|nl|no|nz|pe|ph|pr|pt|ru|se|sg|th|tr|tw|uk|us|za/'时
前一段是否为com或net。如果前一段是com或net就取三位,如果不是,就取二位。
高手请帮忙:思路是这样的,但不能正确得到,请帮改正,谢谢:
$splitresult=preg_split("/\./",$host); //用"."分割主机名
//判断主机名最后一个字符为国家简称,若是,则输出后三个字段,若否,则输出后两个
$countsplit=count($splitresult); //数组中最大元素数
$pattern2='/af|aq|at|au|be|bg|br|ca|ch|cl|cn|de|eg|es|fi|fr|gr|hk|hu|ie|il|in|iq|ir|is|it|jp|kr|mx|nl|no|nz|pe|ph|pr|pt|ru|se|sg|th|tr|tw|uk|us|za/'; //国家简称
$pattern3='/com|net/'; //国际简称
if (preg_match($pattern2,$splitresult[$countsplit-1])){
$matchesurl="".$splitresult[$countsplit-2].".".$splitresult[$countsplit-1];
}elseif ((preg_match($pattern2,$splitresult[$countsplit-1]))||(preg_match($pattern3,$splitresult[$countsplit-2]))){
$matchesurl="".$splitresult[$countsplit-3].".".$splitresult[$countsplit-2].".".$splitresult[$countsplit-1];
}else{
$matchesurl="".$splitresult[$countsplit-2].".".$splitresult[$countsplit-1];
}
$matchesurl=ltrim("$matchesurl", ".");
有关域名的知识可见 http://baike.baidu.com/view/43.htm 我就不刺激你了就按你的想法,可以写作$s =<<< TXT
www2.abc.com.cn
www3.abc.com.cn
xx.xx.abc.com.cn
www2.abc.cn
www3.abc.cn
xx.xx.abc.cn
www2.abc.us
www3.abc.us
xx.xx.abc.us
TXT;
$a = preg_split("/[\r\n]+/", $s); //待识别域名
$g = explode('|', 'af|aq|at|au|be|bg|br|ca|ch|cl|cn|de|eg|es|fi|fr|gr|hk|hu|ie|il|in|iq|ir|is|it|jp|kr|mx|nl|no|nz|pe|ph|pr|pt|ru|se|sg|th|tr|tw|uk|us|za'); //允许的国家域名
$j = array('com', 'net'); //允许的机构名foreach($a as $r) {
echo "$r ==> ";
$n = 0;
$h = array_slice(explode('.', $r), 1); //去掉主机名
if(array_intersect($g, $h)) $n++;
if(array_intersect($j, $h)) $n++;
if($n) echo join('.', array_slice($h, -($n+1)));
echo PHP_EOL;
}
www2.abc.com.cn ==> abc.com.cn
www3.abc.com.cn ==> abc.com.cn
xx.xx.abc.com.cn ==> abc.com.cn
www2.abc.cn ==> abc.cn
www3.abc.cn ==> abc.cn
xx.xx.abc.cn ==> abc.cn
www2.abc.us ==> abc.us
www3.abc.us ==> abc.us
xx.xx.abc.us ==> abc.us