php正则匹配问题 原文件:$ip=IP地址: 211.138.13.66$add=来 自: 河北省石家庄市 移动使用php正则匹后结果,应该怎么写匹配规则啊$ip=211.138.13.66 $add=河北移动 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $ip='IP地址: 211.138.13.66';$add='来 自: 河北省石家庄市 移动';echo preg_replace('#IP地址:\s+(.+)#','$1',$ip);echo '<br>';echo preg_replace('#来 自:\s+(.+)省[^\s]+\s+(.+)#','$1$2',$add); 谢谢jordan102,我试了一下,单独运行是可以的,但放到代码中运行的还是有问题,始终找不到原因,请帮忙看下:<?phpfunction 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; 返回的内容中有 <meta http-equiv="content-type" content="text/html;charset=utf-8">表示返回的内容是 utf-8 编码的你的规则串中有中文,也需要是 utf-8 编码的另外规则 '#来 自:\s+(.+)省[^\s]+\s+(.+)#' 欠妥!为什么省级单位就一定有“省”呢?比如:内蒙古自治区、上海市 就没有“省” 嗯,谢谢!通过中文匹配问题很多,php能否只获取文件的前2行与后2行呢例如:$ipadd变量的值为:"广东省佛山市 电信",获取这个变量的前2行与后2行,结果:广东电信。 mb_internal_encoding("UTF-8");$ipadd="广东省佛山市 电信";echo mb_substr($ipadd,0,2) . mb_substr($ipadd,-2) ; 首先谢谢xuzuning、jordan102热心的回复。下面3段代码,单独放到一个文件中执行的结果没有问题,显示:广东电信mb_internal_encoding("UTF-8");$ipadd="广东省佛山市 电信";echo mb_substr($ipadd,0,2) . mb_substr($ipadd,-2) ; 但是放到下边的代码中后,还是有问题,怀疑是字符编码问题,使用mb_convert_encoding转换后还是有问题,还请指点原因。感谢~~<?phpfunction 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广东电信 你的 $ipaddnew前面还有 和 标签,那么取肯定是取不到的,#3 的方法不行吗。 $ipaddnew前面还有 和 标签 //没看明白?是指$isp=$line[2] . "<br>";这段吗?谢谢! 我去掉了$isp=$line[2] 后面的"<br>";还是不行,还请高手指点。谢谢! $ipaddnew=$ispnew[1];echo $ipaddnew;exit;查看源码 你的程序应该是GB2312或者GBK的把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的就不用了 header('Content-type: text/html;charset=utf-8');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广东省佛山市 电信 jordan102 //直接echo $ipaddnew显示的正常的,即:广东省佛山市 电信xuzuning //加上header('Content-type: text/html;charset=utf-8');这行一行,切割后的地址仍然显示&n,正确的情况是显示:广东电信chinmo //假如你的是GBK或gb1232的程序就启用注释的那句话,如本身是utf8的就不用了。怎么知道程序是的编码类型呢,我的操作系统编码类型是utf-8。 测试我的就知道了,字节数不一样,而且你里面还含有hrml代码 我想统计笔数,可是显示出来的是:Resource id #5请问正确的应该怎么写?????? fputs()出现异常怎么办? 请教sql语句 获取参数的值 今天突然对框架开了窍了~! 如何清空指定的session值? 昨天在配置qmail,其中要修改apache配置文件:User vpopmail;Group vchkpw,修改后不能登录mysql?! 请帮我看看一段数据库管理的代码为何无效 请各位牛人帮我看看这个CURL登陆出现什么问题了 请问高手:关于模板的问题 php 自定义函数 和 数组,那个速度快呢? ckeditor的安全性问题
$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
广东省佛山市 电信