没有看明白你想表述什么。
不过这个例子应该对你有帮助<?php
$s = "function foo() {
if(aaa) {
bbb
}else {
ccc
}
}";
$p = "/(\{)?[^{}]+(?(2)\})/";
preg_match_all($p, $s, $r);
print_r($r);
?>

解决方案 »

  1.   

    试试<?phpclass test{
    var $test;
    function test(){
    }
    }
    $f = file_get_contents(__FILE__);
    $re = "/class[^\{]+(\{([^{}]*|(?1))*\})/s";preg_match_all($re, $f, $out);print_r($out[0]);?>
      

  2.   

    两大高手都帮你了,只有MARK的份了
      

  3.   

    多谢前面两位高手的解答
    唠叨大侠给出了解决问题的线索,我一直只知道PHP有?R的递归引用方式
    还不知道?1这种方式,我看很多介绍正则表达式的地方,写成了?R1,结果无法运行
    寻梦的稻草人大侠给出了,更为详细的解决方案,多谢两位了虽然这样我不用自己手工写递归引用的正则表达式,但是有哪位大侠可以介绍一下
    关于我所写这个复杂的正则表达式为什么在preg_match的时候可以成功
    但是在preg_match_all无法成功
    还是说preg_match_all本身有某种缺陷,才能自己内部实现了递归引用?