自己写的正则表达式提取采集网页内容函数,求人完善优化与交流!QQ:8968737
<?php $content='<a href="http://www.baiduc.om">百度</a>'; $rule = '<a href="||u">|title|</a>'; $arr = preg_message($content, $rule); print_r($arr); /** 按正则表达式提取需要的内容 规定: |[关键字]|[属性] 提取文本,其中关键字和属性是可限项,属性符占一个字符 * 匹配任意文本 关键字命名规范 :单词、数字和下划线任意组合 属性: u:提取的字串是URL p:提取的字串是URL +:提取的字串可合并到关键字相同的内容中 返回: 提取到的内容 访问: 如果||里面有关键字,则按返回数组的键名为关键字;如果没有关键字,则按所在位置访问。 只提取一项内容时,直接返回提取的内容 */ function preg_message($content,$rule,$all=false){ $result=false; if(!preg_match_all('#\|(?<key>[\w]*?)\|(?<mode>[up\+]?)#i', $rule,$ruleArr)) return false; $getArr = $ruleArr[0]; $keyArr = $ruleArr['key']; $modeArr = $ruleArr['mode']; foreach($keyArr as $k=>$key){ $search[]=preg_quote($getArr[$k]); $repalce[] = preg_replace(array('#^\|\|$#','#^\|([\w]+)#','#^\|#','#\|$#','#\|u$#i','#\|p$#i'),array('([\s\S]+?)',"(?<$key>",'(','[\s\S]+?)','[^>\'\"]+?)','[^>\'\"]+?)'),$getArr[$k]); } $rule=preg_quote($rule); $rule=str_replace('\*','[\s\S]*?',$rule); $rule=str_replace($search,$repalce,$rule); $rule="#$rule#i"; if($all) preg_match_all($rule,$content,$arr); else preg_match($rule,$content,$arr); if(empty($arr) || !is_array($arr)) return false; if(count($getArr)==1) return $arr[1]; foreach($keyArr as $k=>$key){ if(empty($key)) $result[$k+1] = $arr[$k+1]; else $result[$key]=$arr[$key]; } return $result; } ?>