打开网易查看源代码,可以看到其中有这样的一段话........
<!-- 新闻中心 Start -->
<div id="NewsCenter">
....................
</div>
<!-- 新闻中心 End -->
.......我只要新闻中间的部分.当然不是想要网易上的东东.因为业务需要,要获得某网站上提交之后的内容.
<!-- 新闻中心 Start -->
<div id="NewsCenter">
....................
</div>
<!-- 新闻中心 End -->
.......我只要新闻中间的部分.当然不是想要网易上的东东.因为业务需要,要获得某网站上提交之后的内容.
解决方案 »
- PHPExcel导出图片大小设置问题
- unicode的字符的问题
- PHP+MySQL求救!
- 取值,有代码,求解!
- 请问谁用过excel_class.php这个类,在读取excel的一点问题
- 求助PHP编程入门。。。
- ------------------求购php商业网站后台 ---------------
- 请高手帮忙看看,为什么jobapp_action没有在显示器上(预览中)没有显示啦?
- 对文件进行类似select...where的查找,用什么函数?
- 文件在各部门间流转要把流程画出来,该怎么实现好(最好流向线不交叉)??
- PHP返回mysql数据库中文字符出现乱码问题,大侠帮助解决?
- 用php访问目录的问题
<?php
error_reporting(E_ALL);
$contents='';function getTheTime(){
$time = gettimeofday();
return ((float)($time['usec']*0.000001) + (float)($time['sec']));
}$startTime1=getTheTime();$handle = fopen ("http://www.163.com", "r");
do {
$data = str_replace("\n",'',fread($handle, 8192));
if (strlen($data) == 0) {
break;
}
$contents .= $data;
} while(true);
$temp1=preg_replace("/.+新闻中心 Start -->(.+)<\!-- 新闻中心 End.+/",'\1',$contents);
fclose($handle);
$endTime1=getTheTime();//echo $temp1;
$startTime2=getTheTime();$handle = fopen ("http://www.163.com", "r");
do {
$data = fread($handle, 8192);
if (strlen($data) == 0) {
break;
}
$contents .= $data;
} while(true);
$temp2=substr($contents,strpos($contents,'<!-- 新闻中心 Start -->'));
$temp2=substr($temp1,0,strpos($temp2,'<!-- 新闻中心 End -->'));
fclose($handle);
$endTime2=getTheTime();//echo $temp2;echo "<br>第一种方法(正则表达式)用时:",$endTime1-$startTime1,"<br>";
echo "第二种方法(截取子字串)用时:",$endTime2-$startTime2,"<br>";?>
直接搜索子串当然比正则快,str_replace就比preg_replace快很多
而且你两次都用fopen()去取内容,影响结果的还有数据传输的因素.
将你的测试代码改正后,你很容易就能看出结果:
<?php
error_reporting(E_ALL);
$contents=file_get_contents('http://www.163.com');
//echo htmlspecialchars($contents);
function getTheTime(){
$time = gettimeofday();
return ((float)($time['usec']*0.000001) + (float)($time['sec']));
}$startTime1=getTheTime();$temp1=preg_replace("/.+新闻中心 Start -->(.+)<\!-- 新闻中心 End.+/",'\1',$contents);$endTime1=getTheTime();//echo $temp1;
$startTime2=getTheTime();$temp2=substr($contents,strpos($contents,'<!-- 新闻中心 Start -->'));
$temp2=substr($temp1,0,strpos($temp2,'<!-- 新闻中心 End -->'));$endTime2=getTheTime();//echo $temp2;echo "<br/>第一种方法(正则表达式)用时:",$endTime1-$startTime1,"<br/>";
echo "第二种方法(截取子字串)用时:",$endTime2-$startTime2,"<br/>";?>
HTML代码而已,要不要换行符又有什么区别呢?
<?php
error_reporting(E_ALL);
echo '<pre>';
$contents=file_get_contents('http://www.163.com');
function getTheTime(){
$time = gettimeofday();
return ((float)($time['usec']*0.000001) + (float)($time['sec']));
}
$startTime1=getTheTime();
$temp1=preg_replace('/.+新闻中心\sStart\s-->(.+)<\!--\s新闻中心\sEnd.+/s', '\1', $contents);
$endTime1=getTheTime();
echo $temp1;
$startTime2=getTheTime();
preg_match('/新闻中心\sStart\s-->(.+)<\!--\s新闻中心\sEnd/s', $contents, $arr);
$endTime2=getTheTime();
print_r($arr);
$startTime3=getTheTime();
$temp2=substr($contents,strpos($contents,'<!-- 新闻中心 Start -->'));
$temp2=substr($temp2,0,strpos($temp2,'<!-- 新闻中心 End -->'));
$endTime3=getTheTime();
echo $temp2;
echo "<br/>第一种方法(正则表达式 preg_replace)用时:",$endTime1-$startTime1;
echo "<br/>第一种方法(正则表达式 preg_match)用时:",$endTime2-$startTime2;
echo "<br/>第三种方法(截取子字串)用时:",$endTime3-$startTime3;
?>