php正则匹配div区间 多层div过滤问题

<div><divclass="a"><div>内容块</div><div></div><div></div><div></div></div><divclass="b"... <div>
<div class="a">
<div>内容块</div>
<div></div><div></div>
<div></div>
</div>
<div class="b">
</div>
</div>

要把div class=“a” 这部分去掉
剩下
<div>
<div class="b">
</div>
</div>
正则该怎么写比较好,就是区间匹配问题
不能加php函数哦 纯正则匹配
展开
 我来答
7883025
2014-12-31 · 超过22用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:40.5万
展开全部
<div([\s\S])?class="b"([\s\S])*?</div>
//如果class="b" 之前有其他DIV属性会影响到匹配
追问
大哥你弄错了  我不是要匹配div class 我是要坎套的div标签
追答
正则只有匹配的功能没有办法帮你过滤其他东西的功能吧
夜神梦无眠
2018-04-12 · TA获得超过3357个赞
知道小有建树答主
回答量:968
采纳率:63%
帮助的人:432万
展开全部

这种根本不能靠一两个函数就能解决的问题,而是考研PHPER逻辑能力的时候

首先获取每个<div 和 </div>对应的位子

function  getCharpos($str, $char){
     $j = 0;
     $g = 0;
     $arr = array();
        $count = substr_count($str, $char);
        for($i = 0; $i < $count; $i++){
               $j = strpos($str, $char);
               if($i == 0){
                    $arr[] = $j;
               }else{
              $arr[] = $j + $g + 1;
               }
             $str = substr($str, $j+1);
             $g = end($arr);
       }
       return $arr;
   }
$list1 =getCharpos($str,"<div");//此时就会返回一个数组每个DIV出现的位子array(0,6,52,142,244);
$list2 = getCharpos($str,"</div>");//同上


//获取对应</DIV>出现的位子
    $count1 = count($list1);
    $count2 = count($list2);
    $count = $count1 + $count2;
    $key1 = 0;
    $key2 = 0;
    $key = 0;
    $j = 0;
    for($i = 0 ; $i < $count ; $i++){
        if($list1[$key1] < $list2[$key2]){
            $key1 ++;
            $j ++;
        }else{
            $key2 ++;
            $j --;
        }
        if($j == 0){
            $key = $key2;
            break;
        }
    }
    
    $str = substr($str, 0,list2[$key]+  strlen("</div>"));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式