需要提取特殊标记并使用正则表达式根据其内容替换它们

时间:2010-08-18 08:38:56

标签: php regex

我正在研究一个简单的模板系统。基本上我正在设置它,以便用户输入填充了表格特殊标签的文本:<== variableName ==>

当系统显示文本时,它将搜索所提及形式的所有标记,并将variableName替换为数据库结果中的相应值。

我认为这需要一个正则表达式,但我在REGEX中真的搞砸了。我正在使用php btw。

感谢帮助人员。

3 个答案:

答案 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);
}