我正在编辑一个PHP文件,用另一个提供的代码替换函数的代码。 我的问题是函数的代码可能会改变。所以,我不知道我应该怎样做正则表达式来找到它。
以下是一个例子:
function lol()
{
echo('omg');
$num=0;
while($num<100)
{
echo('ok');
}
}
function teste()
{
echo('ola');
while($num<100)
{
echo('ok');
}
}
function test()
{
echo('oi');
while($num<100)
{
echo('ok');
}
}
我需要的是获取函数teste()的代码,它将是:
echo('ola');
while($num<100)
{
echo('ok');
}
但是:我不知道函数内部有多少时间,foreach或多少括号,我也不知道它的顺序。这个例子只是一个例子。
我怎样才能获得该函数的代码? 提前谢谢。
答案 0 :(得分:2)
正如其他用户所说,这可能不是一个好方法。如果你决定使用它,仔细检查你的结果,因为regex
可能是危险的。
即使函数是最后一个(@Nippey),你也可以匹配:
(?:function teste\(\))[^{]*{(.*?)}[^}]*?(?:function|\Z)
Note:
我正在使用(?:xyz)
non-capturing parentheses group。检查你的正则表达式引擎是否支持它。
echo('ola');
while($num<100)
{
echo('ok');
}
答案 1 :(得分:1)
使用递归模式(?R)
可以匹配嵌套括号:
$result = preg_replace_callback('#(.*?)\{((?:[^{}]|(?R))*)\}|.*#si', function($m){
if(isset($m[1], $m[2]) && preg_match('#function\s+teste\b#i', $m[1])){
return $m[2];
}
}, $code); // Anonymous function is used here which means PHP 5.3 is required
echo $result;