Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > помогите с preg_replace


Автор: Smorodin 3.8.2007, 10:34
в тексте есть такие подстроки, как [#page_title] [#page-name] [#content6]. Их надо заменить на $page_title $page_name $content6 соответственно. Все утро не могу разобраться...  smile 

Автор: Golda 3.8.2007, 11:53
Код

$str = '12 [#page_title] 34 [#page_name]';
$page_title = 'some title';
$page_name = 'some name';
echo preg_replace_callback("/\[#([^\]]+)\]/", "replace", $str);
function replace($matches)
{
  global $page_title, $page_name;
  return $$matches[1];
}


ИМХО, лучше их объединить в один массив, чтобы поменьше global городить

Автор: teroni 3.8.2007, 11:57
Код

preg_replace("/\[#([a-z_][a-z0-9_]*)\]/Ue", "$$1", $text);

Автор: sTa1kEr 3.8.2007, 18:17
Вариант Golda хороший тем, что можно добавить проверку на существование переменной или выборку из массива или переменных с префиксом.
Код

$str = '12 [#page_title] 34 [#page_name] 56 [#asd]';
$page_title = 'some title';
$page_name = 'some name';
$funcReplace = create_function('$m', 'return(isset($GLOBALS[$m[1]])?$GLOBALS[$m[1]]:"Error!");');
$str = preg_replace_callback("/\[#([^\]]+)\]/", $funcReplace, $str);
echo $str;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)