【置顶】有木有知道正则表达式中的嵌套匹配的语法的?
求大神讲解,百度搜了很多看不明白,希望大神能讲解一下语法是怎样的,谢谢了!
例如:
(a(b(d))c)(e(f(g))m).....
我想得到
(a(b(d))c) 和 (e(f(g))c)
[解决办法]
<?php
$str = '<div id="2"><div id="4"><div id="8"></div></div><div id="5"></div></div><div id="10"><div id="35"><div id="13"></div></div><div id="59"><div id="15"></div></div></div>';
//$reg = '#\(([^\(\)]+
[解决办法]
(?R))*\)#';
//匹配出id为2和id为35的div所包含的内容
$reg = '#<div id="(?:2
[解决办法]
35)">(<([^>\s]+)[^>]*>([<>]*
[解决办法]
(?1))*?</\2>)*</div>#';
preg_match_all($reg, $str, $matches);
echo "<pre>";
var_dump($matches);
echo "</pre>";
虽然可以用,但是不推荐这样用,还是用DOMDocument之类的工具获取内容比较好,毕竟他们更加擅长。
[解决办法]
<?php
$str = '<div id="2"><div id="4"><div id="8"></div></div><div id="5"></div></div><div id="10"><div id="35"><div id="13"></div></div><div id="59"><div id="15"></div></div></div>';
//$reg = '#\(([^\(\)]+
[解决办法]
(?R))*\)#';
//匹配出id为2和id为35的div所包含的内容
$reg = '#<div id="(?:2
[解决办法]
35)">(<([^>\s]+)[^>]*>([<>]*
[解决办法]
(?1))*?</\2>)*</div>#';
preg_match_all($reg, $str, $matches);
echo "<pre>";
var_dump($matches);
echo "</pre>";