PHP:用动态数字替换占位符(分隔符,正则表达式)

时间:2013-04-12 16:25:16

标签: php regex replace delimiter

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

我该怎么做呢?遗憾的是,由于缺乏编码词汇和解释能力,广泛的谷歌搜索和问朋友都让我失望了。它可能与正则表达式有关,但我绝对无法将我的大脑包裹起来,并且所有构建拟合表达的尝试都让我失望。

1 个答案:

答案 0 :(得分: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生成替换。