0

我正在做一个这样的博客管理系统。我允许用户为每个页面定义模板,例如博客主页、类别页面和博客条目页面。

对于主页和类别列表,我希望用户有一个模板变量,其样式{#BLOG:PREVIEW:120#}显示条目的前 120 个字符。

我试过的:

 $content = preg_replace("/{#BLOG:PREVIEW:(.*?)#}/", substr($entry, 0, $1), $template);

但我得到:

解析错误:语法错误,意外的 T_LNUMBER,需要 T_VARIABLE 或 '$'

4

2 回答 2

2

您需要使用正则表达式回调来执行您想要执行的操作:

$content = preg_replace_callback("/{#BLOG:PREVIEW:(.*?)#}/", function($arr) uses($entry) {
    return substr($entry, 0, $arr[1]);
}, $template);

如果您没有支持匿名函数的 PHP 版本:

function template_replace($arr) {
    // This global variable could be replaced with an object member, if inside a class
    global $entry;
    return substr($entry, 0, $arr[1]);
}

$content = preg_replace_callback("/{#BLOG:PREVIEW:(.*?)#}/", 'template_replace', $template);
于 2013-06-10T22:16:36.937 回答
0

你可以这样做:

echo preg_replace_callback('~\{#BLOG:PREVIEW:\K\d++~',
    function($nb) use ($entry) {
        return substr($entry, 0, $nb[0]);
    }, $template);
于 2013-06-10T22:35:55.100 回答