2个回答
展开全部
php的preg正则本身就支持递归吧
(<div>((?1)|\s)*</div>)
用preg_match_all函数是这样写
preg_match_all('{(<div>((?1)|\s)*</div>)}i',$htmltext,$matchs)
这个正则理论上可以匹配到任意层数嵌套的div,为了简化在div之间只能有空格和换行,不能出现其它字符.
解释一下(?1)表示递归引用第一个Group,也就是第一个圆括号的正则
在(?1)的位置可以替换为正则(<div>((?1)|\s)*</div>),然后可以无限递归下去
(<div>((?1)|\s)*</div>)
用preg_match_all函数是这样写
preg_match_all('{(<div>((?1)|\s)*</div>)}i',$htmltext,$matchs)
这个正则理论上可以匹配到任意层数嵌套的div,为了简化在div之间只能有空格和换行,不能出现其它字符.
解释一下(?1)表示递归引用第一个Group,也就是第一个圆括号的正则
在(?1)的位置可以替换为正则(<div>((?1)|\s)*</div>),然后可以无限递归下去
追问
这个为什么也能匹配到换行的呀
追答
\s匹配空白符,这个空白符包括空格,制表符\t,换行等
展开全部
具体代码是什么,举个例子,想匹配哪个匹域指明一下
更多追问追答
追问
code:
匹配到
这种嵌套div
追答
<?php
header("content-type:text/html;charset='utf-8'");
$str="code:<div>
<div>
</div>
</div>
</div>
匹配到
<div>
<div>
</div>
</div>这种嵌套div";
if(preg_match("/(<(div)>.+){2}(<\/\\2>.+){3}(<\\2>.+){2}(<\/\\2>.+){2}/Usi", $str,$arr)){
echo $arr[0];
}
?>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询