php采集链接优秀正则

作者:enenba | 发表于:2015-09-17 22:30 | 分类: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测试代码为:

 

<?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

上一篇: 10进制转62进制 php函数   |   下一篇:phpcms v9的debug函数» 标签: php采集 正则表达式教程 数据采集

评论: