我正在制作这种博客管理系统。我允许用户为每个页面定义模板,如博客主页,类别页面和博客条目页面。
对于主页和类别列表,我希望用户拥有{#BLOG:PREVIEW:120#}
样式的模板变量,然后显示该条目的前120个字符。
我尝试过的事情:
$content = preg_replace("/{#BLOG:PREVIEW:(.*?)#}/", substr($entry, 0, $1), $template);
但我明白了:
解析错误:语法错误,意外T_LNUMBER,期待T_VARIABLE或' $'
答案 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);