Regex从php文件中获取特定的函数代码

Regex从php文件中获取特定的函数代码,php,regex,Php,Regex,我正在编辑一个PHP文件,用提供的另一个代码替换函数的代码。 我的问题是函数的代码可能会更改。所以,我不知道我应该怎么做正则表达式来找到它 下面是一个例子: function lol() { echo('omg'); $num=0; while($num<100) { echo('ok'); } } function teste() { echo('ola'); while($num<100) {

我正在编辑一个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');
    }
}
函数lol()
{
回声(‘omg’);
$num=0;
而($numDisclaimer)
正如其他用户所说,这可能不是一个好方法。如果您决定无论如何使用它,再次检查您的结果,因为
regex
可能是危险的

丑陋的解决方案 即使函数是最后一个(@Nippey),您也可以选择要匹配的内容:

注意:
我使用的是用于的
(?:xyz)
。请检查您的正则表达式引擎是否支持它

输出
echo('ola');

当($num使用递归模式
(?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;

您的最终目标是什么?可能有更好的方法来做您想做的事情,我甚至不会尝试用正则表达式解析PHP。您需要的一切都在函数teste()中吗或者仅仅是第一行?这不是函数的代码
teste
你想要函数的全部内容只是echo吗?我知道你明确地说,如果
teste
不是最后一个函数,这是有效的…但是如果是会发生什么?你可以使用这个修改,所以你不必删除括号:
(?:function teste\(\)[^{]*{(.*)}[^}]*?(?:function)
@STTLCU:使用这个:
(?:function teste\(\)[^{]*{(.*)}[^}]*(?:function |\Z)
@EdouardLopez我不是OP,但我想如果你现在使用nippey的建议,输出是没有外部括号的。我使用了第一个选项,其中函数不是最后一个函数,因为我知道它不是,也不会在我工作的平台中。但是,最后一个更好,所以谢谢你们:)
(?:function teste\(\))[^{]*{(.*?)}[^}]*?(?:function|\Z) 
    echo('ola');
    while($num<100)
    {
        echo('ok');
    }
$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;