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

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

Strict Standards: Resource ID#34 used as offset, casting to integer (34) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Вопрос по регулярным выражениям
ТвойWeb » WebMaster класс » PHP/Perl » Вопрос по регулярным выражениям

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

1. Watari - 14 Февраля, 2008 - 07:46:32 - перейти к сообщению
Есть текст, например такой:
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);

то все работает.... но хотелось бы по отдельным тегам разбить Хм
2. ETC - 14 Февраля, 2008 - 08:07:43 - перейти к сообщению
Вообще-то квадратные скобки означают range. У вас скобки не экранированы слешами, в отличие от рабочего кода.
3. Furax - 14 Февраля, 2008 - 08:13:16 - перейти к сообщению
Кроме того, регулярные выражения в стиле Perl необходимо заключать в пару слэшей.

Кстати, разбиение по отдельным тегам, на мой взгляд, не совсем правильно, т. к. тогда при отсутствии закрывающего тега в коде будет присутствовать только открывающий <font>. Да и проверять, что там введено вместо цвета, не мешало бы, а то я могу ввести javascript с перенаправлением всех пользователей на совсем другой сайт...
4. Watari - 14 Февраля, 2008 - 09:04:57 - перейти к сообщению
CODE:
$replyMSG=preg_replace("\\[color=(.*)\\]","<font color=\\1>",$replyMSG);


так?
гммм... тогда выводит ошибку:
Цитата:
preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in:............
5. Watari - 14 Февраля, 2008 - 09:16:41 - перейти к сообщению
Furax пишет:
Да и проверять, что там введено вместо цвета, не мешало бы, а то я могу ввести javascript с перенаправлением всех пользователей на совсем другой сайт...


ммммм...... а как такую проверку можно сделать? Растерялся
6. Furax - 14 Февраля, 2008 - 23:54:03 - перейти к сообщению
Watari
Прямыми слэшами, а не обратными. Одиночными.
CODE:
$regexp='/abc/';


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

Форум на AlfaSpace.NET


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

[Script Execution time: 0.0254]     [ Gzipped ]