我在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 = '}';
答案 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 = '}';