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