带有Class Delimiter Var的preg_replace {* ...}

时间:2014-05-23 13:05:24

标签: php preg-replace

我在PHP中编写了一个小模板类。

模板类使用分隔符来替换变量

例如一个简单的模板

<title>{$WEBSITE_TITLE}</title>

如果我没有分配占位符,他们将保留在网站源代码中。 但是作为示例,我有一个注释标记,如果我没有分配它们,用户就不应该看到它们。

如果我不知道{$ ...}内的内容,怎么能用任何内容替换该文本?

{$/SOME TEXT THAT WE DONT KNOW/}

此刻我尝试了很多。我执行此操作的代码是:

preg_replace(
    "/\/$this->_leftDelimiter(.*?)$this->_rightDelimiter/",
    "",
    $this->_template
);

Class delimiter vars:

private $_leftDelimiter = '{$';
private $_rightDelimiter = '}';

2 个答案:

答案 0 :(得分:0)

您应该将类​​变量(分隔符)放在字符串之外:

preg_replace(
    "/".$this->_leftDelimiter."([^".$this->_rightDelimiter."]*?)".$this->_rightDelimiter."/",
    "",
    $this->_template
);

答案 1 :(得分:0)

您应该使用preg_replace_callback函数,该函数允许您根据其内容替换匹配的字符串。

function teplateVars($matches) {
    // your logic here
    return $this->getStringForVariable($matches[1]);
}
preg_replace(
    "/".$this->_leftDelimiter."([^".$this->_rightDelimiter."]*?)".$this->_rightDelimiter."/",
    "templateVars",
    $this->_template
);

还要确保正确转义_leftDelimiter和_rightDelimiter属性,以便可以在正则表达式中使用它们。左括号和美元符号具有特殊含义

private $_leftDelimiter = '\{\$';
private $_rightDelimiter = '}';