专注于discuz,uchome,dedecms等各类PHP程序仿站(二次开发和模板制作)。

« »

php采集链接优秀正则

这两天在用PHP写个采集程序,采集程序采集链接是最开始也是最基础的部分。在链接这个正则上还真是花的时间长。主要是花在一些网站的代码不规范,但是这些不规范的代码偏偏浏览器又能同样解析,好了,不啰嗦了,直接说主题。

浏览器能解析成功的链接代码有:

  1.  <a href= http://www.huoyue.org  target=_blank >一</a> 
  2. <a href=http://www.huoyue.org  target=_blank>二</a>  
  3. <a href=http://www.huoyue.org>三</a>
  4. <a href=http://www.huoyue.org  target=_blank >四</a>
  5. <a href=’http://www.huoyue.org’  target=_blank>五</a>
  6. <a href=”http://www.huoyue.org” target=_blank>六</a>
  7. <a href  =”http://www.huoyue.org” target=_blank >七</a>;

解析后就是这样的:                    

而我们的正则就是:

<a\s.*?href\s*?=\s*([\"\']?)([^\s\>\'\"]+)\1.*?>.*?<\/a>

而PHP测试代码为:

function doCode($str){
 if(!is_array($str)){
   $str=htmlspecialchars($str);
  }else{
    array_walk_recursive($str,”doArrCode”);
  }
  return $str;
}
function doArrCode(&$value) {
  $value=doCode($value);
}

function getUrl($str){
 $regex=’/<a\s.*?href\s*?=\s*([\"\']?)([^\s\>\'\"]+)\1.*?>.*?<\/a>/i’;
  preg_match_all($regex,$str,$data,PREG_PATTERN_ORDER);
 return $data[2];
}

$str=”<a href= http://www.huoyue.org  target=_blank >一</a><a href=http://www.huoyue.org  target=_blank>二</a><a href=http://www.huoyue.org>三</a><a href=http://www.huoyue.org  target=_blank >四</a><a href=\’http://www.huoyue.org\’  target=_blank>五</a><a href=\”http://www.huoyue.org\” target=_blank>六</a><a href  =\”http://www.huoyue.org\” target=_blank >七</a>”;
echo “$str<br/><br/>”.doCode($str).”<br/><br/>”;
var_dump(doCode(getUrl($str)));

原创文章如转载,请注明:转载自火跃工作室
本文网址:http://www.huoyue.org/php-herf-reg

日志信息 »

该日志于2010-07-24 23:05由 火跃 发表在PHP+mysql分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

相关日志 »

没有评论

发表评论 »