日期:2014-05-17  浏览次数:20415 次

【置顶】有木有知道正则表达式中的嵌套匹配的语法的?
求大神讲解,百度搜了很多看不明白,希望大神能讲解一下语法是怎样的,谢谢了!
例如:
(a(b(d))c)(e(f(g))m).....
我想得到
(a(b(d))c)  和 (e(f(g))c)
正则表达式 嵌套匹配

------解决方案--------------------
<?php
$str = '(a(b(d))c)(e(f(g))m)';
$reg = '#\(([^\(\)]+
------解决方案--------------------
(?R))*\)#';

$matches = array();
preg_match_all($reg, $str, $matches);

var_dump($matches);

------解决方案--------------------
引用:
Quote: 引用:

<?php
$str = '(a(b(d))c)(e(f(g))m)';
$reg = '#\(([^\(\)]+
------解决方案--------------------
(?R))*\)#';

$matches = array();
preg_match_all($reg, $str, $matches);

var_dump($matches);


能吧括号换成html标签然后讲解一下吗?

你直接贴你自己实际代码 别人好帮你实际分析
------解决方案--------------------
<?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之类的工具获取内容比较好,毕竟他们更加擅长。