正則表示式採集網頁內容函式
阿新 • • 發佈:2020-12-18
<?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; } ?>