如何将 preg_replace 中的参数传递给 PHP 中的函数?

How to pass parameter in preg_replace to a function in PHP?

我想做这样的事情:

我有这个字符串:

Lorem ipsum {shortcode 42} dolor sit amet.

我想这样解析:

preg_replace('/\{shortcode (\d+)\}/i', MyClass::myFunction('') , $content);

MyClass 代码如下所示:

class MyClass {
    public static function myFunction(string $id) {
        // ...

        return 'hello world';
    }

}

但是在myFunction()$id永远是</code>字符串,而不是原来的内容<code>,什么是数字。

如何将参数中的 preg_replace 替换值传递给我的函数?

使用 class 的静态方法作为回调的简单示例:

class MyClass {
    static function myFunction($arg) {
        return "[Hello, {$arg[1]}]";
    }
}

$content = 'Lorem ipsum {shortcode 42} dolor sit amet.';
echo preg_replace_callback('/\{shortcode (\d+)\}/i', 'MyClass::myFunction', $content);

Fiddle.

不重写您的 class 方法,使用 preg_replace_callback 中的匿名函数调用您的方法,使用索引 1 作为第一个捕获组匹配:

$result = preg_replace_callback('/\{shortcode (\d+)\}/i',
                                function($m) {
                                    return MyClass::myFunction($m[1]);
                                }, $content);

或者您可以调用静态方法,但是您需要使用那里的参数的 1 索引:

// ['MyClass', 'myFunction'] or 'MyClass::myFunction'
$result = preg_replace('/\{shortcode (\d+)\}/i', ['MyClass', 'myFunction'], $content);

class MyClass {
    public static function myFunction(array $array) {
        // use $array[1]

        return 'hello world';
    }

}