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
Форумы портала PHP.SU :: Версия для печати :: Замена подобно BBCode
Форумы портала PHP.SU » PHP » Регулярные выражения » Замена подобно BBCode

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

1. dikiyprapor50 - 14 Августа, 2010 - 23:42:08 - перейти к сообщению
есть строка например "как то раз летом я пошел в лес [sr]3[/sr] и заблудился"

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

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

думаю Вы поняли зачем это Закатив глазки
2. biperch - 14 Августа, 2010 - 23:51:54 - перейти к сообщению
Теде нужна вот эта функция
http://www.php.su/str_replace ()" target="_blank">str_replace ()
3. Uchkuma - 14 Августа, 2010 - 23:54:04 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. echo preg_replace('#\[sr\](.*)\[/sr\]#U', '<img src="$1.gif">', 'как то раз летом я пошел в лес [sr]3[/sr] и заблудился');

(Добавление)
biperch пишет:
Теде нужна вот эта функция
str_replace ()
а как ей, если не секрет?
4. biperch - 15 Августа, 2010 - 00:02:06 - перейти к сообщению
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.  



можно и регуляркой
5. Uchkuma - 15 Августа, 2010 - 00:05:29 - перейти к сообщению
Цитата:
$yummy = array("<img src="100.gif">", "<img src="99.gif">", ... "<img src="2.gif">", "<img src="1.gif">");
Ага, 2 массива по сотне элементов Радость .
6. dikiyprapor50 - 15 Августа, 2010 - 00:14:09 - перейти к сообщению
Uchkuma пишет:
PHP:
скопировать код в буфер обмена
echo preg_replace('#\[sr\](.*)\[/sr\]#U', '<img src="$1.gif">', 'как то раз летом я пошел в лес [sr]3[/sr] и заблудился');



а как в $1 окажется именно то число коорое в [sr]3[/sr] ???
7. Uchkuma - 15 Августа, 2010 - 00:16:51 - перейти к сообщению
ссылка на подмаску, вроде как.
8. movEAX - 15 Августа, 2010 - 00:26:40 - перейти к сообщению
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: не юзайте двойные кавычки без надобности
9. Uchkuma - 15 Августа, 2010 - 00:28:02 - перейти к сообщению
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]?
10. JustUserR - 15 Августа, 2010 - 01:55:36 - перейти к сообщению
Uchkuma пишет:
А вот ваше решение как раз не верно. Что мы получим, если в тексте попадется лишний открытый или закрытый тег [sr]?
В действительности осуществлять прямые замены необходимо с помощью тех функцию которые будет просматривать соответствующее положение в подстроке только в одной итерации или запоминать позицию - иначе может произойти вторичная замена или затронуться лишние компоненты В случае замены без использования шаблона в таком случае будет полезна функция strtr - в то время как обычная str_replace некорректно работает с пересекающимися заменами
11. dikiyprapor50 - 15 Августа, 2010 - 22:52:21 - перейти к сообщению
вот что я намутил в итоге :

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.  



каряво наверно, зато работает Радость
12. Uchkuma - 15 Августа, 2010 - 23:37:01 - перейти к сообщению
Не проще было регуляркой? Не знаю, сколько микросекунд вы выиграли данной конструкцией и выиграли ли вообще, но обслуживать такой код точно мало удовольствия.
13. movEAX - 16 Августа, 2010 - 00:07:06 - перейти к сообщению
Uchkuma пишет:
А вот ваше решение как раз не верно. Что мы получим, если в тексте попадется лишний открытый или закрытый тег [sr]?

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

 

Powered by ExBB FM 1.0 RC1