我正在尝试将php中的函数解析为3个东西:名称,参数和内容。
我有一个正确的正则表达式,但问题是他只能解析一个函数。即 - 如果我写了一个函数,他可以解析它,但如果我写了一个函数和一个print_r他会混淆。
正则表达式是这样的:
preg_match("/function.+?([a-zA-Z0-9_]+?)[\s]*\((.*?)\)[\s]*\{(.+)\}/is", $code, $functions);
我没有写过,有人帮助我,因为我正在吸食正则表达式。谢谢你的帮助。
祝你好运, 罗伊。
答案 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);
)
)
如果函数体包含{}字符,则会遇到问题。我认为这不能用一个正则表达式来处理。