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

嵌套正则写法
PHP code

$string = "some text (a(b(c)d)e) more text"; 
if(preg_match("/\((?>[^()]+|(?R))*\)/",$string,$matches)) 
{ 
echo "<pre>"; print_r($matches); echo "</pre>"; 
} 


上面是网上找到的嵌套正则写法,把string改成:
$string = 'some text <tag:cate name="a"><div></div><tag:cate name="b"><div></div><tag:cate>c</tag:cate>d</tag:cate>e</tag:cate> more text';

改成这样后,正则规则我换不过来了,亲大虾帮忙改一下。

最好能做到<tag:cate name="n"></tag:cate>个数不确定的嵌套匹配

------解决方案--------------------
PHP code
<?php
$string = 'some text <tag:cate name="a">a<tag:cate name="b">b<tag:cate>c</tag:cate>d</tag:cate>e</tag:cate> more text';
preg_match("/<tag:cate(?: name=\"\w+\")?>(?>\w+|(?R))*<\/tag:cate>/",$string,$matches) &&
    print_r($matches);