原文件:
$ip=IP地址: 211.138.13.66
$add=来 自: 河北省石家庄市 移动
使用php正则匹后结果,应该怎么写匹配规则啊
$ip=211.138.13.66
$add=河北移动
$ip=IP地址: 211.138.13.66
$add=来 自: 河北省石家庄市 移动
使用php正则匹后结果,应该怎么写匹配规则啊
$ip=211.138.13.66
$add=河北移动
$add='来 自: 河北省石家庄市 移动';
echo preg_replace('#IP地址:\s+(.+)#','$1',$ip);
echo '<br>';
echo preg_replace('#来 自:\s+(.+)省[^\s]+\s+(.+)#','$1$2',$add);
function getip($ip){
$baidu_html = file_get_contents('http://www.baidu.com/s?wd=' . $ip);
$preg = '!<p class="op_ip_detail">(.*?)</p>\s*<p class="op_ip_detail">(.*?)(?=</p>)!';
preg_match($preg, $baidu_html, $line);
$ipaddr=$line[1] . "<br>";
$isp=$line[2] . "<br>";
//echo $ipaddr;
//echo $isp;
$ip1=preg_replace('#IP地址:\s+(.+)#','$1',$ipaddr);
echo '<br>';
$ip2=preg_replace('#来 自:\s+(.+)省[^\s]+\s+(.+)#','$1$2',$isp);
echo $ip1;
echo $ip2;
}getip('211.138.13.66');?>运行结果还是:IP地址: 211.138.13.66
来 自: 河北省石家庄市 移动
preg_match('#IP地址: ([^<]+)#s',$ipaddr,$ar);
$ip1=$ar[1];
echo '<br>';
preg_match('#<strong>(.+)省[^\s]+\s+([^<]+)</strong>#s',$isp,$m);
$ip2=$m[1].$m[2];
echo $ip1;
echo $ip2;
表示返回的内容是 utf-8 编码的
你的规则串中有中文,也需要是 utf-8 编码的
另外规则 '#来 自:\s+(.+)省[^\s]+\s+(.+)#' 欠妥!
为什么省级单位就一定有“省”呢?比如:内蒙古自治区、上海市 就没有“省”
例如:$ipadd变量的值为:"广东省佛山市 电信",获取这个变量的前2行与后2行,结果:广东电信。
$ipadd="广东省佛山市 电信";
echo mb_substr($ipadd,0,2) . mb_substr($ipadd,-2) ;
mb_internal_encoding("UTF-8");
$ipadd="广东省佛山市 电信";
echo mb_substr($ipadd,0,2) . mb_substr($ipadd,-2) ; 但是放到下边的代码中后,还是有问题,怀疑是字符编码问题,使用mb_convert_encoding转换后还是有问题,还请指点原因。感谢~~<?php
function getip($ip){
$baidu_html = file_get_contents('http://www.baidu.com/s?wd=' . $ip);
$preg = '!<p class="op_ip_detail">(.*?)</p>\s*<p class="op_ip_detail">(.*?)(?=</p>)!';
preg_match($preg, $baidu_html, $line);
$ipaddr=$line[1] . "<br>";
$isp=$line[2] . "<br>";$outip = explode(":", $ipaddr);
$outipnew=$outip[1];
echo $outipnew;$ispnew = explode(":", $isp);
$ipaddnew=$ispnew[1];
mb_convert_encoding($ipaddnew,"utf-8");
mb_internal_encoding("utf-8");
echo mb_substr($ipaddnew,0,2,"utf-8") . mb_substr($ipaddnew,-2,"utf-8"); }getip('14.223.191.58');?>结果显示:
14.223.191.58
&n正常情况应该显示:
14.223.191.58
广东电信
谢谢!
echo $ipaddnew;
exit;查看源码
function getip($ip){
$baidu_html = file_get_contents('http://www.baidu.com/s?wd=' . $ip);
//$baidu_html =iconv("UTF-8", "GBK//IGNORE", $baidu_html);
$preg = '!<p class="op_ip_detail">(.*?)</p>\s*<p class="op_ip_detail">(.*?)(?=</p>)!';
preg_match($preg, $baidu_html, $line);
$ipaddr=$line[1] . "<br>";
$isp=$line[2] . "<br>";$outip = explode(":", $ipaddr);
$outipnew=$outip[1];
echo $outipnew;$ispnew = explode(":", $isp);
$ipaddnew=preg_replace('/\<br\>|\ \;/', '',strip_tags($ispnew[1]));
echo mb_substr($ipaddnew,0,6) . mb_substr($ipaddnew,-6); }
getip('14.223.191.58');假如你的是GBK或gb1232的程序就启用注释的那句话,如本身是utf8的就不用了
function getip($ip){
$baidu_html = file_get_contents('http://www.baidu.com/s?wd=' . $ip);
$preg = '!<p class="op_ip_detail">.*;([\d.]+)</p>\s*<p class="op_ip_detail">.*?strong>(.*?)(?=</strong>)!';
preg_match($preg, $baidu_html, $line);
echo $line[1] . "<br>";
echo $line[2] . "<br>";
}getip('14.223.191.58');14.223.191.58
广东省佛山市 电信