Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Замена подобно BBCode

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
dikiyprapor50
Отправлено: 14 Августа, 2010 - 23:42:08
Post Id



Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




есть строка например "как то раз летом я пошел в лес [sr]3[/sr] и заблудился"

где в выражении [sr]3[/sr] цифра может быть от 1 до 100.

как на ПХП в этой строке заменить [sr]3[/sr] на <img src="3.gif">

думаю Вы поняли зачем это Закатив глазки
 
 Top
biperch
Отправлено: 14 Августа, 2010 - 23:51:54
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




Теде нужна вот эта функция
http://www.php.su/str_replace ()" target="_blank">str_replace ()
 
 Top
Uchkuma
Отправлено: 14 Августа, 2010 - 23:54:04
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




PHP:
скопировать код в буфер обмена
  1. echo preg_replace('#\[sr\](.*)\[/sr\]#U', '<img src="$1.gif">', 'как то раз летом я пошел в лес [sr]3[/sr] и заблудился');

(Добавление)
biperch пишет:
Теде нужна вот эта функция
str_replace ()
а как ей, если не секрет?

(Отредактировано автором: 14 Августа, 2010 - 23:58:48)

 
 Top
biperch
Отправлено: 15 Августа, 2010 - 00:02:06
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $phrase  = "You should eat fruits, vegetables, [sr]2[/sr] and fiber every day.";
  3. $healthy = array("[sr]3[/sr]", "[sr]2[/sr]", "[sr]1[/sr]");
  4. $yummy   = array("<img src="3.gif">", "<img src="2.gif">", "<img src="1.gif">");
  5.  
  6. $newphrase = str_replace($healthy, $yummy, $phrase);
  7.  
  8.  



можно и регуляркой
 
 Top
Uchkuma
Отправлено: 15 Августа, 2010 - 00:05:29
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Цитата:
$yummy = array("<img src="100.gif">", "<img src="99.gif">", ... "<img src="2.gif">", "<img src="1.gif">");
Ага, 2 массива по сотне элементов Радость .
 
 Top
dikiyprapor50
Отправлено: 15 Августа, 2010 - 00:14:09
Post Id



Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




Uchkuma пишет:
PHP:
скопировать код в буфер обмена
echo preg_replace('#\[sr\](.*)\[/sr\]#U', '<img src="$1.gif">', 'как то раз летом я пошел в лес [sr]3[/sr] и заблудился');



а как в $1 окажется именно то число коорое в [sr]3[/sr] ???
 
 Top
Uchkuma
Отправлено: 15 Августа, 2010 - 00:16:51
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




ссылка на подмаску, вроде как.
 
 Top
movEAX
Отправлено: 15 Августа, 2010 - 00:26:40
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




biperch пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. $phrase  = "You should eat fruits, vegetables, [sr]2[/sr] and fiber every day.";
  3. $healthy = array("[sr]3[/sr]", "[sr]2[/sr]", "[sr]1[/sr]");
  4. $yummy   = array("<img src="3.gif">", "<img src="2.gif">", "<img src="1.gif">");
  5.  
  6. $newphrase = str_replace($healthy, $yummy, $phrase);
  7.  
  8.  



можно и регуляркой

PHP:
скопировать код в буфер обмена
  1. $phrase  = 'You should eat fruits, vegetables, [sr]2[/sr] and fiber every day.';
  2. $healthy = array('[sr]', '[/sr]');
  3. $replace = array('<img src="', '.gif">');
  4.  
  5. $newphrase = str_replace($healthy, $replace, $phrase);

Так будет правильней Улыбка
ps: не юзайте двойные кавычки без надобности


-----
армия.. самое убогое место
 
 Top
Uchkuma
Отправлено: 15 Августа, 2010 - 00:28:02
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




movEAX пишет:
Так будет правильней
Правильней в данном случае регулярка =).
(Добавление)
movEAX пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. $phrase  = 'You should eat fruits, vegetables, [sr]2[/sr] and fiber every day.';
  3. $healthy = array('[sr]', '[/sr]');
  4. $replace = array('<img src="', '.gif">');
  5.  
  6. $newphrase = str_replace($healthy, $replace, $phrase);
А вот ваше решение как раз не верно. Что мы получим, если в тексте попадется лишний открытый или закрытый тег [sr]?

(Отредактировано автором: 15 Августа, 2010 - 00:33:22)

 
 Top
JustUserR
Отправлено: 15 Августа, 2010 - 01:55:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Uchkuma пишет:
А вот ваше решение как раз не верно. Что мы получим, если в тексте попадется лишний открытый или закрытый тег [sr]?
В действительности осуществлять прямые замены необходимо с помощью тех функцию которые будет просматривать соответствующее положение в подстроке только в одной итерации или запоминать позицию - иначе может произойти вторичная замена или затронуться лишние компоненты В случае замены без использования шаблона в таком случае будет полезна функция strtr - в то время как обычная str_replace некорректно работает с пересекающимися заменами


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
dikiyprapor50
Отправлено: 15 Августа, 2010 - 22:52:21
Post Id



Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




вот что я намутил в итоге :

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. while ($tmp=strstr($rows,'[img]')and $rows!=="ошибка фомата сообщения"){
  4.         $tmp=substr($tmp,5);
  5.         $tmp2=explode('[img]',$rows);
  6.         if ($tmp3=strstr($tmp,'[/img]')){
  7.                 $tmp3=substr($tmp3,6);
  8.                 $tmp4=explode('[/img]',$tmp);
  9.                 $rows=$tmp2[0]."<img src=\"./smails/AllSmail (".$tmp4[0].").gif\" width=50 height=50>".$tmp3;
  10.                 }
  11.                         else $rows="ошибка фомата сообщения";
  12. }
  13.  
  14.  



каряво наверно, зато работает Радость
 
 Top
Uchkuma
Отправлено: 15 Августа, 2010 - 23:37:01
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Не проще было регуляркой? Не знаю, сколько микросекунд вы выиграли данной конструкцией и выиграли ли вообще, но обслуживать такой код точно мало удовольствия.
 
 Top
movEAX
Отправлено: 16 Августа, 2010 - 00:07:06
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




Uchkuma пишет:
А вот ваше решение как раз не верно. Что мы получим, если в тексте попадется лишний открытый или закрытый тег [sr]?

В таком случае можно написать какой-нибудь валидатор.


-----
армия.. самое убогое место
 
 Top
JustUserR
Отправлено: 16 Августа, 2010 - 01:09:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




movEAX пишет:
В таком случае можно написать какой-нибудь валидатор.
Для проверки на предмет правильности расстановки всех открывающих и закрывающих тегов а также вложенных в них элементов - как правило используется обрабатывающая функции и стек - вы осуществляете последовательный просмотр открывающих тегов в строке и их сохранене в стековый массив - и соответственно при нахождении закрывающего тега он должен быть равен тому который находится в последней позиции в стеке - обратная ситуация свидительствует о направильной расстановке и вложении тегов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB