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函数哦 纯正则匹配 展开
<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函数哦 纯正则匹配 展开
2个回答
展开全部
这种根本不能靠一两个函数就能解决的问题,而是考研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>"));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询