亲爱的stackoverflow社区,
我目前正在为一个网站制作我自己的模板系统,我可以用PHP代码替换{$ stuff}样式的模板占位符。我有以下代码:
/**
* Replace a default placeholder.
*
* @access public
* @param string $replace Placeholder name
* @param string $replacement Text with which to replace placeholder.
* @uses $leftDelimiter
* @uses $rightDelimiter
* @uses $template
*/
public function assign($replace, $replacement) {
$this->template = str_replace( $this->leftDelimiter .$replace.$this->rightDelimiter,
$replacement, $this->template );
}
leftDelimiter和rightDelimiter在这种情况下分别是{$和}。
现在我想添加一个新功能,动态解析包含数字的占位符 - 比如{$ image_1},{$ image_2},{$ image_3}并允许我使用其中包含的数字作为替换代码,例如我将{$ image_1337}替换为id为“1337”的行中的mysql数据库条目。
我该怎么做呢?遗憾的是,由于缺乏编码词汇和解释能力,广泛的谷歌搜索和问朋友都让我失望了。它可能与正则表达式有关,但我绝对无法将我的大脑包裹起来,并且所有构建拟合表达的尝试都让我失望。
答案 0 :(得分:0)
使用preg_replace
代替str_replace
:
preg_replace("/\\{\\\$image_(\d).*?\\}/", "$1", $template)
这个简单的示例将{$image_2}
替换为2
等。
如果你需要在替代品中使用真正的逻辑,你有两个选择:
使用preg_match_all
查找模板中模式的所有实例。然后,您可以迭代实例,并使用普通str_replace($match, $your_smart_replacement, $template)
使用允许回调功能的preg_replace_callback
生成替换。