正则表达式采集网页内容函数

自己写的正则表达式提取采集网页内容函数,求人完善优化与交流!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;
}
?>
posted on 2012-06-16 19:16 Likeping's Blog 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/likeping/archive/2012/06/16/2552040.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值