使用正则表达式解析php函数

时间:2012-06-30 21:22:49

标签: php regex parsing

我正在尝试将php中的函数解析为3个东西:名称,参数和内容。

我有一个正确的正则表达式,但问题是他只能解析一个函数。即 - 如果我写了一个函数,他可以解析它,但如果我写了一个函数和一个print_r他会混淆。

正则表达式是这样的:

preg_match("/function.+?([a-zA-Z0-9_]+?)[\s]*\((.*?)\)[\s]*\{(.+)\}/is", $code, $functions);

我没有写过,有人帮助我,因为我正在吸食正则表达式。谢谢你的帮助。

祝你好运, 罗伊。

1 个答案:

答案 0 :(得分:1)

我不确定我理解你的问题,但似乎你的正则表达式不会解析$ code变量中的多个函数?

这是一个稍微重写的正则表达式,可以处理多个函数

$code = 'function myfunc1() { echo "This is myfunc1"; } function myfunc2($arg1 = array(), $arg2) { echo "This is myfunc2"; print_r($arg1); }';

preg_match_all("/function\s*([a-zA-Z0-9_]+)\s*\((.*)\)\s*\{(.*)\}/Uis", $code, $functions);

echo '<pre>';
print_r($functions);
echo '</pre>';

输出

Array
(
    [0] => Array
        (
            [0] => function myfunc1() { echo "This is myfunc1"; }
            [1] => function myfunc2($arg1 = array(), $arg2) { echo "This is myfunc2"; print_r($arg1); }
        )

    [1] => Array
        (
            [0] => myfunc1
            [1] => myfunc2
        )

    [2] => Array
        (
            [0] => 
            [1] => $arg1 = array(), $arg2
        )

    [3] => Array
        (
            [0] =>  echo "This is myfunc1"; 
            [1] =>  echo "This is myfunc2"; print_r($arg1); 
        )

)

如果函数体包含{}字符,则会遇到问题。我认为这不能用一个正则表达式来处理。