用回调替换字符串的正确方法

时间:2019-09-29 17:21:17

标签: php regex

我正在致力于CMS的实现,并希望包括类似于word press使用短代码的功能,但是我无法用函数回调替换“短代码”。

我正在使用下面的正则表达式在代码中找到所有“短代码”,并且可以正常工作,我只是想不出如何用函数回调代替它。

正则表达式:/ [([^]] *)] /

我到目前为止所拥有的(不起作用)

function runShortcodes($input){
        return preg_replace_callback(
            '/\[([^\]]*)\]/', function ($matches)
                {
                $function = $matches[1];
                ob_start();
                $function();
                $return = ob_get_contents();
                ob_end_clean();
                return $return;
                }, $input
        );
    }
function event(){
        return 'it worked';
    }
echo runShortcodes('test [event]');

现在,我只是想将[event]替换为事件函数的返回数据。

1 个答案:

答案 0 :(得分:1)

当您使用输出缓冲来捕获短代码函数的值时,您实际上需要从event()函数中输出某些内容...

function event(){
    return 'it worked';
}

只是将值传回,请尝试...

function event(){
    echo 'it worked';
}

或者删除输出缓冲,然后从短代码中返回值...

function runShortcodes($input){
    return preg_replace_callback(
        '/\[([^\]]*)\]/', function ($matches)
        {
            $function = $matches[1];
            return $function();
    }, $input
    );
}
function event(){
    return 'it worked';
}
echo runShortcodes('test [event]');