+ -
当前位置:首页 → 问答吧 → 关于正则表达式多页连接获取的问题

关于正则表达式多页连接获取的问题

时间:2010-06-22

来源:互联网

<?php

$con = file_get_contents("http://www.php100.com/html/shipinjiaocheng/list_18_1.html");
$con .= file_get_contents("http://www.php100.com/html/shipinjiaocheng/list_18_2.html");


$preg = "#<strong>(.*)</strong></a></td>#iUs";

preg_match_all($preg, $con, $arr);

foreach($arr[0] as $id=>$v){

  echo $arr[0][$id]."<br>";
}

?>
如果不执行红色代码,可以顺利匹配出各个标题,但如果把第二页的代码加入得出的结果就不对了!请高手赐教!

作者: 7109137   发布时间: 2010-06-22

你的写法有问题,我写了个获取所有页面标题的,你可以参考一下:
复制代码
  1. $content = file_get_contents('http://www.php100.com/html/shipinjiaocheng/list_18_1.html');
  2. preg_match('/<span\s+class=[\'"]?pageinfo[\'"]?>.*<strong>(\d+)<\/strong>.*<\/span>/isU', $content, $page); // 匹配出总页数
  3. if ($page[1] > 1) {
  4.     for ($i = 2; $i <= $page[1]; $i++) {
  5.         $content .= file_get_contents('http://www.php100.com/html/shipinjiaocheng/list_18_'.$i.'.html');
  6.     }
  7. }
  8. preg_match_all('/<img\s+src=[\'"]?.*sdd\.gif[\'"]?>.*<strong>(.*)<\/strong><\/a><\/td>/isU', $content, $title);
  9. foreach ($title[1] as $val) {
  10.     echo $val.'<br />';
  11. }


我建议你读取一页匹配一次,虽然一次性读取再匹配效率可能会高一些,但是受网络等环境因素的影响,很可能出现读取超时的现象。

作者: riyan   发布时间: 2010-06-22

首先感谢riyan兄弟的热心帮助。
另外我对riyan兄的代码做一个解释,好让初学的朋友也能理解,达到共同进步的目的
<span class="pageinfo">共 <strong>8</strong>页<strong>112</strong>条</span>
'/<span\s+class=[\'"]?pageinfo[\'"]?>.*<strong>(\d+)<\/strong>.*<\/span>/isU'

上面是我们要匹配的正则字符串:1. \s 取消中间的空格 2。[\'"] 对双引号,和单引号进行一个反义,就是让引号失去本身的作用,只做字符串处理。这里只需要用\”, 考虑到多页处理,担心其他页面用'所以,保险起见添加了‘。 3。?也是处理0-1个字符(本例可取消) 4..*一些中文字符 5。(\d+)页面数。6 .*是条目数。 \isU 整体取消空格,贪婪匹配和回车换行。

作者: 7109137   发布时间: 2010-06-22

作者: 落枫残雪   发布时间: 2010-06-26

学习了~~~~~

作者: zixing1020   发布时间: 2010-06-27

没有搞懂啊!

作者: 鼠标山城   发布时间: 2010-07-23

学习一下

作者: luwq   发布时间: 2010-07-23

谢谢,解释

作者: leif   发布时间: 2010-07-27

不好意思,自己做了个新站,在贵地做条外链,不算广告啊,为了百度尽快收录
http://www.cdxcdz.com

作者: 7109137   发布时间: 2010-08-27