我正在研究一个简单的模板系统。基本上我正在设置它,以便用户输入填充了表格特殊标签的文本:<== variableName ==>
当系统显示文本时,它将搜索所提及形式的所有标记,并将variableName替换为数据库结果中的相应值。
我认为这需要一个正则表达式,但我在REGEX中真的搞砸了。我正在使用php btw。
感谢帮助人员。
答案 0 :(得分:2)
这里是一个相当快速和肮脏的黑客:
<?php
$teststring = "Hello <== tag ==>";
$values = array();
$values['tag'] = "world";
function replaceTag($name)
{
global $values;
return $values[$name];
}
echo preg_replace('/<== ([a-z]*) ==>/e','replaceTag(\'$1\')',$teststring);
输出:
Hello world
只需将“变量”放在变量数组中,它们就会被替换。
正则表达式的e
修饰符告诉它评估替换,[a-z]
允许您使用字符az命名“变量”(如果使用[a-z0-9],则可以使用你想要包括数字)。除了它非常标准的PHP。
答案 1 :(得分:1)
非常有用 - 指出我正在寻找的东西......
替换模板中的标签,例如
<<page_title>>, <<meta_description>>
具有相应的请求变量e,g,
$_REQUEST['page_title'], $_REQUEST['meta_description'],
使用已发布代码的修改版本:
$html_output=preg_replace('/<<(\w+)>>/e', '$_REQUEST[\'$1\']', $template);
很容易将其更改为使用来自DB等的值替换模板标签...
答案 2 :(得分:0)
如果您正在进行简单的替换,那么您不需要使用正则表达式。您可以使用更快的str_replace()
。
(我假设您的'&lt; =='和'==&gt;'正在分隔您的模板var并被您的值替换?)
$subject = str_replace('<== '.$varName.' ==>', $varValue, $subject);
循环浏览所有模板变量......
$tplVars = array();
$tplVars['ONE'] = 'This is One';
$tplVars['TWO'] = 'This is Two';
// etc.
// $subject is your original document
foreach ($tplVars as $varName => $varValue) {
$subject = str_replace('<== '.$varName.' ==>', $varValue, $subject);
}