Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#23 used as offset, casting to integer (23) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#25 used as offset, casting to integer (25) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Вопрос по регулярным выражениям
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


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

> Описание: замена слов
Watari
Отправлено: 14 Февраля, 2008 - 07:46:32
Post Id


Newbie


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

Карма 0




Есть текст, например такой:
CODE:
"Привет, [color=red]привет[/color], привет"
Вопрос как заменить
CODE:
[color=red]
на
CODE:
<font color=red>


Мой код что то криво пашет:
CODE:
$replyMSG=preg_replace("[color=(.*)]","<font color=\\1>",$replyMSG);
$replyMSG=str_replace("[/color]","</font>",$replyMSG);


Как конечный результат у меня выходит следующее:
CODE:
привет, [<font color=red]привет</font>, привет>
это исходный код, а выглядит все так: привет, [, привет>
А?!

Если так написать:
CODE:
$replyMSG=eregi_replace("(.*)\\[color=(.*)\\](.*)\\[/color](.*)",
"\\1<font color=\\2>\\3</font>\\4",$replyMSG);

то все работает.... но хотелось бы по отдельным тегам разбить Хм
 
 Top
ETC Администратор
Отправлено: 14 Февраля, 2008 - 08:07:43
Post Id



Flash-coder


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

Карма 26




Вообще-то квадратные скобки означают range. У вас скобки не экранированы слешами, в отличие от рабочего кода.
 
 Top
Furax
Отправлено: 14 Февраля, 2008 - 08:13:16
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Кроме того, регулярные выражения в стиле Perl необходимо заключать в пару слэшей.

Кстати, разбиение по отдельным тегам, на мой взгляд, не совсем правильно, т. к. тогда при отсутствии закрывающего тега в коде будет присутствовать только открывающий <font>. Да и проверять, что там введено вместо цвета, не мешало бы, а то я могу ввести javascript с перенаправлением всех пользователей на совсем другой сайт...

(Отредактировано автором: 14 Февраля, 2008 - 08:15:25)

 
 Top
Watari
Отправлено: 14 Февраля, 2008 - 09:04:57
Post Id


Newbie


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

Карма 0




CODE:
$replyMSG=preg_replace("\\[color=(.*)\\]","<font color=\\1>",$replyMSG);


так?
гммм... тогда выводит ошибку:
Цитата:
preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in:............

(Отредактировано автором: 14 Февраля, 2008 - 09:06:20)

 
 Top
Watari
Отправлено: 14 Февраля, 2008 - 09:16:41
Post Id


Newbie


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

Карма 0




Furax пишет:
Да и проверять, что там введено вместо цвета, не мешало бы, а то я могу ввести javascript с перенаправлением всех пользователей на совсем другой сайт...


ммммм...... а как такую проверку можно сделать? Растерялся

(Отредактировано автором: 14 Февраля, 2008 - 09:17:58)

 
 Top
Furax
Отправлено: 14 Февраля, 2008 - 23:54:03
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Watari
Прямыми слэшами, а не обратными. Одиночными.
CODE:
$regexp='/abc/';


Проверку? Я бы включил в общий код:
CODE:
preg_replace('/\[color=((#[0-9a-fA-F]{1,6})|(\w+))\](.+)\[\/color\]/', '<font color="\\1">\\4</font>', $text);
 
 Top
Watari
Отправлено: 16 Февраля, 2008 - 01:33:38
Post Id


Newbie


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

Карма 0




спасибо Улыбка )
правда сделал немного по другому)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0, скрытых: 0)
« PHP/Perl »


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



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0441]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33