如果你要div class="nav" monkey="nav"和div class="head-ad"之间的所有源码,用 preg_match 就可以,不用preg_match_all ,如果你要里面的所有的 li/li标签中的内容,可以用preg_match_all
成都创新互联公司是一家专业提供孝感企业网站建设,专注与做网站、网站设计、H5页面制作、小程序制作等业务。10年已为孝感众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
//提取所有代码
$pattern = '/div class="nav" monkey="nav"(.+?)div class="head-ad"/is';
preg_match($pattern, $string, $match);
//$match[0] 即为div class="nav" monkey="nav"和div class="head-ad"之间的所有源码
echo $match[0];
//然后再提取li/li之间的内容
$pattern = '/li.*?(.+?)\/li/is';
preg_match_all($pattern, $match[0], $results);
$new_arr=array_unique($results[0]);
foreach($new_arr as $kkk){
echo $kkk;
}
我写好了,用Dreamweaver调试过,可以匹配。
先用下面正则提取需要的代码段:
Draw Result.+?(\d{1,2})/td.+?(\d{1,2})/td.+?(\d{1,2})/td.+?(\d{1,2})/td.+?(\d{1,2})/td.+?(\d{1,2})/td
再用正则替换,把该内容中除了数字以外的代码去除:
替换成$1,$2,$3,$4,$5,$6 即可得到 4,7,8,33,36,43
$str = 'li class="blackArea" data-sourcelatest-elem="item" data-tvid="694641300" data-vid="7b0b59d2ef0cb1152368ca9be9a4ae76" data-idx="4" data-sourcelatest-month="" data-delegate="videoPlayList"
p class="video_position video_rb"span class="v_name" rseat="xj_ty3"第2017-06-08期/span/p
h3 a title="微体兔新版馋嘴小面" href="javascript:void(0);" rseat="xj_vn3"微体兔新版馋嘴小面/a /h3
/li';
$pattern = "/[\s\S]*li[^]+data-tvid[=\"\']+([^\"\']*)[\"\'][^]*data-vid[=\"\']+([^\"\']*)[\"\'][\s\S]*/i";
$tvid = preg_replace($pattern, "$1", $str);
$vid = preg_replace($pattern, "$2", $str);
$reg = "/[\s\S]*p[^]*((?:(?!\/p)[\s\S])*)\/p[\s\S]*/i";
$p = preg_replace($reg, "$1", $str);
$reg = "/[\s\S]*h3[^]*((?:(?!\/h3)[\s\S])*)\/h3[\s\S]*/i";
$h3 = preg_replace($reg, "$1", $str);
echo $tvid."\n".$vid."\n".$p."\n".$h3;
会用正则就会抓取。
不会正则,一时半会也教不错。
不过,推荐你使用phpQuery这个框架,用jQuery的使用器来抓取数据。