Regex从php文件中获取特定的函数代码
我正在编辑一个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) {
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;