Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2009, 16:21   #1
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию регулярные выражения

Есть некоторый текст, в котором встречаются слова вида "[input=1]", "[input=3]", "[input=10]" и так далее. Хранится в переменной $contents.

Также есть массив $inputs со строками, на которые надо заменить упомянутые мной слова.

Первая моя мысль была прописать строку
$contents = preg_replace("/\[input=([0-9]+)\]/", $inputs[$1], $contents);

Оказалось, так сделать нельзя... Что в принципе логично.
Мой вопрос таков. Можно ли решить проблему регэкспами или все же придется от них отказаться?
wyvern@localhost:~$ sudo emerge --unmerge world

Последний раз редактировалось wyvern; 09.04.2009 в 16:24.
wyvern вне форума Ответить с цитированием
Старый 09.04.2009, 20:08   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

А нельзя создать еще один массив ?

Код:
 $a1 = array ("/\[input=1\]/", "/\[input=3\]/", "/\[input=10\]/");
 $a2 = array ("s1", "s3", "s10");

 $contents = preg_replace($a1, $a2, $contents);
alexBlack вне форума Ответить с цитированием
Старый 09.04.2009, 21:00   #3
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

можно, конечно... вся фигня в том, что неизвестно заранее, сколько их будет... и какие у них индексы...
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 09.04.2009, 22:15   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Тогда с модификатором /e
(прямое обращение к массиву почему-то не разворачивается, а с функцией работает)

Код:
 function f($n)
 {
   $a2 = array ("s1", "s3", "s10");
   return $a2[$n-1];
 }

 $contents = "aaa [input=1] bbb [input=2] ccc [input=3]" ;

 $contents = preg_replace("/\[input=([0-9]+)\]/e", "f($1)", $contents);
alexBlack вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения ACE Valery PHP 5 14.10.2009 11:37
Регулярные выражения и SQLite3 XeN0N Общие вопросы C/C++ 0 19.01.2009 16:52
регулярные выражения (Unicode) element Общие вопросы Delphi 3 08.12.2007 00:16
Регулярные выражения Adamant Общие вопросы C/C++ 1 26.11.2007 19:44