Php 查找正则表达式

Php 查找正则表达式,php,regex,Php,Regex,有一行包含以下内容: function dekorator($func, $agrs = []) { if (dd){ var_dump("dekorators"); $func(); } } if (true) { @dekorator function test() { if (ss){ var_dump("tests"); while(){

有一行包含以下内容:

function dekorator($func, $agrs = [])
{
    if (dd){
        var_dump("dekorators");

        $func();
    }
}

if (true)
{
    @dekorator
    function test()
    {
        if (ss){
            var_dump("tests");
            while(){
                dd
            }
        }
    }

    function dgdg()
    {
        var_dump("ff");
    }

    test();
}
我需要得到以下信息:

  • 函数名
  • 功能参数
  • 函数体(在引号{}内)仅与 功能)
  • 我写了一个正则表达式:

    /function?\s+(\w+)*\(([^\)]*)\).*?\{([^\}]+[^\{]+)\}/sim
    
    function\s+(\w*)\s*\((.*?)\)\s*(\{((?>[^{}]+|(?3))*)\})
    
    但是有一个,它捕获的最后一个函数不是引号(与函数本身无关)

    功能本身:

    function dgdg()
    {
        var_dump("ff");
    }
    
    多余的:

        test();
    }
    
    演示

    使用以下表达式:

    /function?\s+(\w+)*\(([^\)]*)\).*?\{([^\}]+[^\{]+)\}/sim
    
    function\s+(\w*)\s*\((.*?)\)\s*(\{((?>[^{}]+|(?3))*)\})
    

    演示:

    如果你在课堂上有这个,那么你可以使用@Justinas,重点是这是一个Strings。我认为在正则表达式中不可能做到这一点。事实上,有太多的边缘情况,并且regexp不是为这类作品设计的,而且仍然不完美。但是你可以用状态机来正确解析你的字符串。非常感谢,昨天我想到了这种正则表达式
    function\s([^\]+)\(.*)\)\s*({(.*$.[^{}]\(?3))*}