正则表达式从php文件中获取特定的函数代码

时间:2013-06-25 08:02:17

标签: php regex

我正在编辑一个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或多少括号,我也不知道它的顺序。这个例子只是一个例子。

我怎样才能获得该函数的代码? 提前谢谢。

2 个答案:

答案 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;

Online demo