Необходимо извлечь специальные теги и заменить их на основе их содержимого с помощью регулярного выражения - PullRequest
0 голосов
/ 18 августа 2010

Я работаю над простой системой шаблонов. В основном я настраиваю его так, чтобы пользователь вводил текст, заполненный специальными тегами вида: <== variableName ==>

Когда система отображает текст, она ищет все теги указанной формы и заменяет variableName на соответствующее значение из результата базы данных.

Я думаю, что для этого потребуется регулярное выражение, но я действительно запутался в REGEX здесь. Я использую PHP кстати.

Спасибо за помощь, ребята.

Ответы [ 3 ]

2 голосов
/ 18 августа 2010

Довольно быстрый и грязный хак здесь:

<?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 голос
/ 07 февраля 2011

Очень полезно - указал мне на то, что я искал ...

Замена тегов в шаблоне, например

<<page_title>>, <<meta_description>>

с соответствующими переменными запроса e, g,

$_REQUEST['page_title'], $_REQUEST['meta_description'],

с использованием измененной версии опубликованного кода:

$html_output=preg_replace('/<<(\w+)>>/e', '$_REQUEST[\'$1\']', $template);

Это легко изменить, чтобы заменить теги шаблона значениями из БД и т. Д. ...

0 голосов
/ 18 августа 2010

Если вы делаете простую замену, тогда вам не нужно использовать регулярное выражение.Вы можете просто использовать str_replace(), что на быстрее .

(я предполагаю, что ваши '<==' и '==>' разделяют ваш шаблонvar и заменяются на ваше значение?)

$subject = str_replace('<== '.$varName.' ==>', $varValue, $subject);

И циклически перебирать все ваши шаблоны vars ...

$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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...