用于文章片段的模板样式变量的正则表达式

时间:2013-06-10 22:14:56

标签: php regex

我正在制作这种博客管理系统。我允许用户为每个页面定义模板,如博客主页,类别页面和博客条目页面。

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

我尝试过的事情:

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

但我明白了:

  

解析错误:语法错误,意外T_LNUMBER,期待T_VARIABLE或' $'

2 个答案:

答案 0 :(得分:2)

您需要使用regular expression callback来完成您的工作:

$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);

答案 1 :(得分:0)

你可以这样做:

echo preg_replace_callback('~\{#BLOG:PREVIEW:\K\d++~',
    function($nb) use ($entry) {
        return substr($entry, 0, $nb[0]);
    }, $template);