![]() |
preg replace
PHP код:
[IMG:12] на <center><img src=\"../kit/picture.php?pid=12" title="бля бля бля"></center> вот бля бля и содержится в $title... но это меняет только первую [IMG: ... на картинку а остальные не трогает... подскажите где торможу |
shuron
вместо "/^[IMG:(d+)]/" имхо нужно "/[IMG:(d+)]/" |
preg_replace('/\[IMG:(\d+)\]/', "<center><img src=\"../kit/picture.php?pid=$1\" title=\"Титле\"></center>", '[IMG:12]');
Как минимум надо еще вместо [ поставить \[. Ибо [ - управляющий символ |
ну да тогда он меняет всё.. это верно...
но title= тогда тоже везде одинаковый... последний в массиве... странно тоже... |
Ясен пень что везде одинаковый. Чего ты хотел? Он тебе в первом же цикле все подобные выражения меняет, а в следющих циклах их уже нет за место них стоит тег ИМГ
|
medved2002
Что-то ты не так вопрос понял помойму.. |
Юзай /e или str_replace
|
medved2002
а почемуже тогда в title значение послуднего титле во втором случае выходит... тоесть значение последнего прохождения цыкла Добавлено через 1 минуту: medved2002 дай пример со strreplace-- тут целый парсер надо строить так как. длина цыфры в [IMG:... постоянно различная |
Ну смотри
у тебя есть текст "[IMG:0] ывралфыв [IMG:1] ывмрывфлоалы [IMG:2]"; начинаем цикл. первый заход $i = 0; $i<3{ выполняем прег_репласе на выходе получаем следующее Код:
"<center><img src="../kit/picture.php?pid=0" title="Титле"></center> ывралфыв <center><img src="../kit/picture.php?pid=1" title="Титле"></center> ывмрывфлоалы <center><img src="../kit/picture.php?pid=2" title="Титле"></center>"Вопрос: Найдет ли прег_репласе в следующем цикле в этом тексте что либо похожее на [IMG:(\d)]? |
нет конечно...
ну так какой второй шаг... Добавлено через 4 минуты: погоди я догадываюсь ищем srreplace.. "title='Титле'" и потом заменяем на тот что в массиве.. |
Второй шаг. Чего ты хочешь сделать?
То есть у тебя в массиве title[0] описалово всех картинок которые могут быть в тексте? |
да...!!
и теперь я попробую так сделать... но сначало надо перекусить... спасибо! лови 5 |
Это со стррепласе
for($i=0; $i < count($title); $i++) { $text = str_replace("[IMG:$i]","<center><img src=\"../kit/picture.php?pid=\1\" title=\"".$title[0][$i]."\"></center>",$text); } Есть вариант заставить прег репласе каждый раз когда он находит совпадение выполнять некую функцию и заменять совпадение на результат выполнения этой функции Добавлено через 3 минуты: Ну я уж закончу с прег_репласем function retImg($i){ global $title; return '<center><img src=\"../kit/picture.php?pid='.$i.'\" title=\"'.$title[0][$i].'\"></center>'; } $text = preg_replace('/\[IMG:(\d+)\]/e', "retImg($1);", $text); |
странно но так у меня не работает смотри мой второй топ.
|
Чего говорит? Какой код?
|
щас попробую твой второй вариант..
а что $1 - это и будет та цыфра... Добавлено через 5 минут: Warning: Compilation failed: unmatched parentheses at offset 8 in /home/h_shuron/web/de/tusovoditel/www/news/index.php on line 67 вот что говорит.. на твой второй выриант с функцией 67 это строчка с preg_replace |
Ага. Она и будет. Ты только потом скинь код который у тебя не работал - чисто в исследовательских интересах
Добавлено через 3 минуты: А ты точно скопировал паттерн для прег_реплейса? Вроде как он на него ругается. Добавлено в ту же минуту: У меня все выполняется на ять Добавлено через 5 минут: Есть подозрение что у тебя в этом паттерне /\[IMG:(\d+)\]/e пропало :( - ушло в смайлик. |
Да ты прав имменно в смайдик и ушло...
и ещё одну ошибочку допустил подгоняя под собственные нужды.. теперь всё работает на ура.. спасибо!!!! |
Со стрреплейсом у тебя чего не работало?
|
сос стрреплейсом я не стал делать.. второй вариант мне больше понравился...
всего один пробег по тексту...;) |
| Часовой пояс GMT +4, время: 08:51. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.