0

亲爱的 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 数据库条目。

我该怎么做呢?可悲的是,由于我缺乏编码词汇和解释能力,广泛的谷歌搜索和询问朋友让我失望了。它可能与正则表达式有关,但我绝对不能用我的大脑来围绕它们,并且所有构建合适表达式的尝试都失败了。

4

1 回答 1

0

使用preg_replace代替str_replace

preg_replace("/\\{\\\$image_(\d).*?\\}/", "$1", $template)

这个简单的例子{$image_2}2等替换了。

如果您需要在替换中使用真正的逻辑,您有两种选择:

  1. 用于preg_match_all在模板中查找模式的所有实例。然后您可以遍历实例,并使用普通str_replace($match, $your_smart_replacement, $template)

  2. 使用preg_replace_callback允许回调函数生成替换。

于 2013-04-12T16:33:21.980 回答