PHP调用时间传递引用替换为正则表达式

PHP调用时间传递引用替换为正则表达式,php,regex,pass-by-reference,Php,Regex,Pass By Reference,我正在将一个office管理系统从PHP5.3移植到5.4,错误在于许多函数实现了按引用传递(参数中的“&”符号),这会停止应用程序运行时。我用以下方法解决了这个问题: //This is a function with pass by reference: function myfunc(&$x, $y, &$z) { ... } //This is the above function being implemented: $myClass->myfunc(&

我正在将一个office管理系统从PHP5.3移植到5.4,错误在于许多函数实现了按引用传递(参数中的“&”符号),这会停止应用程序运行时。我用以下方法解决了这个问题:

//This is a function with pass by reference:
function myfunc(&$x, $y, &$z) { ... }

//This is the above function being implemented:
$myClass->myfunc(&$var1, $var2, &$var3);
php文档告诉我,在实现函数时必须删除“&”,因此我必须将该行替换为:

$myClass->myfunc($var1, $var2, $var3);
因为函数定义已经具有符号含义,即参数是通过引用来的

但是我有这么多的php文件,超过800个文件,我必须一行一行地替换

因此,我只需要一个正则表达式来帮助我定位所有这些“&$”巧合(避免表示AND的&&以及函数声明中的任何“&$”巧合)


我构建了这个正则表达式:[^&]&\$,它可以工作,但需要排除任何以“function”(这将是一个函数声明)开头的巧合。

它几乎是完美的,但它也将函数声明视为巧合。我需要避免在这些行中替换“&”。它只需要验证行的开头没有“函数”字。我怎样才能将验证添加到(?看,它给了我这一行:函数加载使用($sis,$ven,&$pe,&$seg,&$per)是的,它可以工作,但在netbeans中似乎不工作。我在debian中使用了regexer,它工作了。谢谢你的帮助,伙计!@Carlosantiodiomorales,如果它对你有效,我会接受的
^(\s*function.*)$|(?<!&)&(?=\$[^(]*\))
$re = "/^(\\s*function.*)$|(?<!&)&(?=\\$[^(]*\\))/im";
$str = "&\$)\n&&\$\n\$myClass->myfunc(&\$var1, \$var2, &\$var3);\nfunction myfunc(&\$x, \$y, &\$z) { ... }\n\n";
$subst = "$1";

$result = preg_replace($re, $subst, $str);