preg_replace - как бы извернуться?

trompert

Guest
preg_replace - как бы извернуться?

Задачка:
Есть ассоциативный массив данных.

$users = array('Name'=>'Юзер1', 'Email'='[email protected]');

Есть строка где есть код типа {Name}, {Email}
$letters['Content'] = "Меня зовут {Name}, мой емейл - {Email}";

Надо заменить {Name} на $users['Name']; и тп..

Хотел сначала так:

$letterText = preg_replace("/({\/?)(\w+)([^}]*})/e", $users['\\2'], $letters['Content']);

Не работает... Точнее подставляет пустую строку вместо $users['\\2'].
Регулярка вроде верная - '\\2' выводит то что нужно.
Как быть, хелп! ?
 

Demiurg

Guest
Использовать готовые шаблонные движки.
 

trompert

Guest
Originally posted by Demiurg
Использовать готовые шаблонные движки.
Не нужны мне в данном случае готовые шаблонные движки. Мне нужен скрипт на 5 строк кода.
 

Фанат

oncle terrible
Команда форума
раньше такие строки писали, как
$letters['Content'] = "Меня зовут %s, мой емейл - %s";

но я знаю, что это не ответ на вопрос :)
но мне отладка и собственных регов тяжело дается, чтобы еще чужими заниматься :)
 

crocodile2u

http://vbolshov.org.ru
Твой скрипт и будет содержать 5 строк кода, если ты послушаешь demiurga
 

Фанат

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

trompert

Guest
Originally posted by crocodile2u
Твой скрипт и будет содержать 5 строк кода, если ты послушаешь demiurga
Все же не буду слушать демиурга и уложусь в 1 строку.

1. $lettertpl = preg_replace_callback("/({\/?)(\w+)([^}]*})/", "GetUserParam", $letters['Content']);
 

Krisha

pain in the neck
Ну раз уж пошла такая шняга, то формировать такую строку и без регов можно:
PHP:
$letters['Content'] = "Меня зовут " . $users['Name'] . ", мой емейл - " . $users['Email'];
P.S. Кстати, обрати внимание, что у тебя вот тут ошибка:
$users = array('Name'=>'Юзер1', 'Email' = '[email protected]');
 

Фанат

oncle terrible
Команда форума
кстати, я правильно понимаю, что preg_replace_callback всегда можно заменить парой preg_match/preg_replace?
 

DiZeWS

Новичок
Я у себя делал что то вроде такого:
....
PHP:
$users = array('Name'=>'Юзер1', 'Email'='[email protected]');
while (list ($key, $val) = each ($users)) {
   preg_replace('{'.$key.'}', $val, $letters['Content']);
}
 

trompert

Guest
Originally posted by DiZeWS
Я у себя делал что то вроде такого:
....
PHP:
$users = array('Name'=>'Юзер1', 'Email'='[email protected]');
while (list ($key, $val) = each ($users)) {
   preg_replace('{'.$key.'}', $val, $letters['Content']);
}
Тогда вообще preg_replace можно заменить на str_replace... хотелось сразу и все а не циклом. :)

-~{}~ 10.09.04 18:33:

Originally posted by Krisha
Ну раз уж пошла такая шняга, то формировать такую строку и без регов можно:
PHP:
$letters['Content'] = "Меня зовут " . $users['Name'] . ", мой емейл - " . $users['Email'];
Не пойдет, для юзеров которые в лучше случае могут редактировать шаблон через WYSIWYG интерфейс...


P.S. Кстати, обрати внимание, что у тебя вот тут ошибка:
$users = array('Name'=>'Юзер1', 'Email' = '[email protected]');
Ну это разве ошибка... Опечатка. :)
 
Сверху