1

我有一个 PHP 源代码存储在一个变量中,我想在其中用正则表达式进行替换。

return我想在源代码中存在的每个语句前面附加一个自定义方法调用。

目前我正在这样做:

<?php
$code = '
class SomeClass
{
    public function TestMethod ( )
    {
        $count = 0;
        if ( $count = 2 )
            return false;

        if ( $count == 4 )
        {
            return;
        }
    }

    public function TestMethod ( )
    {
        return SomeCalculatedValue (4 + 10 );
    }
} ';

$code = preg_replace ( '~return~', 'someFunc(); return', $code );

echo '<pre>';
echo $code;
echo '</pre>';

这基本上有效。我唯一的问题是return这样的陈述:

if ( $count = 2 )
    return false;

return没有封装在任何大括号中,这使得:

if ( $count = 2 )
    someFunc(); return false;

和这个不一样:

if ( $count = 2 ) {
    someFunc(); return false;
}

所以基本上我想要做的是添加这些括号,如果它们丢失了。

我知道您可以使用正则表达式“向前看”和“向后看”(尽管我仍然对它们感到不舒服)以确定括号是否在那里。但是,如果 a 中缺少括号,是否还有一种方法可以添加括号preg_replace

任何人都知道如何做到这一点?

演示可以在这里找到

4

1 回答 1

2

为什么不捕获完整的返回行并始终在替换文本中使用大括号,如下所示:

$code = preg_replace ( '/(return\s*[^;]*;)/i', '{ someFunc(); $1 }', $code );

输出:供您输入:

class SomeClass
{
    public function TestMethod ( )
    {
        $count = 0;
        if ( $count = 2 )
            { someFunc(); return false; }

        if ( $count == 4 )
        {
            { someFunc(); return; }
        }
    }

    public function TestMethod ( )
    {
        { someFunc(); return SomeCalculatedValue (4 + 10 ); }
    }
}
于 2013-08-05T18:59:54.310 回答