这两天在用PHP写个采集程序,采集程序采集链接是最开始也是最基础的部分。在链接这个正则上还真是花的时间长。主要是花在一些网站的代码不规范,但是这些不规范的代码偏偏浏览器又能同样解析,好了,不啰嗦了,直接说主题。
浏览器能解析成功的链接代码有:
- <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>;
而我们的正则就是:
<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))); ?>
评论: