Консультация № 58235
09.10.2006, 11:07
0.00 руб.
0 7 4
Доброго времени суток.
Делаю замену bb-кодов при помощи str_replace
а вот как выполнить замену [color=blue] и прочих цветов?
В регулярных выражениях ноль.

Обсуждение

Неизвестный
09.10.2006, 11:38
общий
это ответ
Здравствуйте, Алексеенко С.Ю.!

Попробуйте вот так:

preg_replace("#\[color=(\#?[\w]+)\](.*?)\[/color\]#si"
"<span style="color:\$1">\$2</span>", $text);
Удачи.
Неизвестный
09.10.2006, 11:39
общий
Извините. Я невнимательно прочитал вопрос, и не заметил, что автор просил на str_replace.А если все-таки соберетесь делать на регулярке, то правильнее будет так: preg_replace("#\[color=(\#?[\w]+)\](.*?)\[/color\]#si","_<_span_style="color:\$1">\$2</_span_>_",$text) Нижние подчеркивания нужно убрать. Без них парсер минифорума не пропускает теги.
Неизвестный
09.10.2006, 11:49
общий
это ответ
Здравствуйте, Алексеенко С.Ю.!
буду краток(с)
только код

Приложение:
<?phpfunction BBCodeToHtml($s){ $s=preg_replace("/\n\r?/","
",$s); $s=preg_replace("/\[b\](.*?)\[\/b\]/ei","‘<b>‘.‘\\1‘.‘</b>‘",$s); $s=preg_replace("/\[i\](.*?)\[\/i\]/ei","‘<i>‘.‘\\1‘.‘</i>‘",$s); $s=preg_replace("/\[u\](.*?)\[\/u\]/ei","‘<u>‘.‘\\1‘.‘</u>‘",$s); $s=preg_replace("/\[color=(.*?)\](.*?)\[\/color\]/ei","‘<font color=‘.‘\\1‘.‘>‘.‘\\2‘.‘</font>‘",$s); $s=preg_replace("/\[size=(.*?)\](.*?)\[\/size\]/ei","‘<font size=‘.‘\\1‘.‘>‘.‘\\2‘.‘</font>‘",$s); $s=preg_replace("/\[h\](.*?)\[\/h\]/ei","‘<h6>‘.‘\\1‘.‘</h6>‘",$s); $s=preg_replace("/\[url\](.*?)\[\/url\]/ei","‘<a href=.‘\\1‘.‘>‘.‘\\1‘.‘</a>‘",$s); $s=preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/ei","‘<a href=‘.‘\\1‘.‘>‘.‘\\2‘.‘</a>‘",$s); $s=preg_replace("/\[img(.*?)\](.*?)\[\/img\]/ei","‘<img scr=‘.‘\\2‘.‘\\1‘.‘ \>‘",$s); $s=preg_replace("/\[table(.*?)\](.*?)\[\/table\]/ie","‘<table ‘.‘\\1‘.‘>‘.‘\\2‘.‘</table>‘",$s); $s=preg_replace("/\[tr(.*?)\](.*?)\[\/tr\]/ei","‘<tr ‘.‘\\1‘.‘>‘.‘\\2‘.‘</tr>‘",$s); $s=preg_replace("/\[td(.*?)\](.*?)\[\/td\]/ei","‘<td ‘.‘\\1‘.‘>‘.‘\\2‘.‘</td>‘",$s); $s=preg_replace("/\[p(.*?)\]/ei","‘<p‘.‘\\1‘.‘>‘",$s); return $s;}function BBCodeToPlane($s){ $s=preg_replace("/\n\r?/"," ",$s); $s=preg_replace("/\[b\](.*?)\[\/b\]/ie","‘\\1‘",$s); $s=preg_replace("/\[i\](.*?)\[\/i\]/ei","‘\\1‘",$s); $s=preg_replace("/\[u\](.*?)\[\/u\]/ei","‘\\1‘",$s); $s=preg_replace("/\[color=(.*?)\](.*?)\[\/color\]/ei","‘\\1‘",$s); $s=preg_replace("/\[size=(.*?)\](.*?)\[\/size\]/ei","‘\\1‘",$s); $s=preg_replace("/\[h\](.*?)\[\/h\]/e","‘\\1‘",$s); $s=preg_replace("/\[url\](.*?)\[\/url\]/ei","‘\\1‘",$s); $s=preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/ei","‘\\2‘",$s); $s=preg_replace("/\[img(.*?)\](.*?)\[\/img\]/i","",$s); $s=preg_replace("/\[table(.*?)\](.*?)\[\/table\]/ei","‘\\2‘",$s); $s=preg_replace("/\[tr(.*?)\](.*?)\[\/tr\]/ei","‘\\2‘",$s); $s=preg_replace("/\[td(.*?)\](.*?)\[\/td\]/ei","‘\\2‘",$s); $s=preg_replace("/\[p(.*?)\]/","",$s); return $s;}?>
давно
Бакалавр
7287
292
09.10.2006, 12:05
общий
Скажем так, я не просил на str_replase обязательно.Просто я не знаю как это сделать вообще, теперь понемногу начинаю понимать.
Неизвестный
09.10.2006, 12:13
общий
это ответ
Здравствуйте, Алексеенко С.Ю.!
Почитайте статьи по регулярным выражениям на сайте <a href=‘http://php.su‘>php.su</a> и на <a href=‘http://www.softtime.ru/info/bookphp.php‘>www.softtime.ru</a>.
Код есть в приложении, но объянять чего-либо по нему толку нет...Прочитав статьи не поймёте, как обходились раньше без регулярных выражений:)

Приложение:
print preg_replace(‘~\[color=?(\w*)?\](.*?)\[/color\]~is‘,‘<font color=$1>$2</font>‘,‘stamm‘); |===================| |Приложение от CIMUS:==|т.к. у него весь текст не вставляеться в ответ |===================| <? /* На входе функция принимает текст, содержащий bb-коды, на выходе вы получаете готовый HTML для вывода на экран. Для своей работы функция требует еще 3 функции: Первая функция занимается раскраской PHP кода, таким образом, как это делают профессиональные редакторы. На входе она получает bb-код [php][/php], на выходе, возвращает раскрашенный PHP код, содержащийся между этими тегами. Вторая функция позволяет вывести на экран произвольный программный код или HTML так, чтобы видны были все теги (
Код:
). Третья функция позволяет вывести раскрашенный SQL запрос к базе данных ([sql][/sql]). */ print bbcode2html(‘привет привет blue‘ ); function bbcode2html($message) { $preg = array( ‘/(?<!\\\\)\[color(?::\w+)?=(.*?)\](.*?)\[\/color(?::\w+)?\]/si‘ => "<span style="color:\\1">\\2</span>", ‘/(?<!\\\\)\[size(?::\w+)?=(.*?)\](.*?)\[\/size(?::\w+)?\]/si‘ => "<span style="font-size:\\1">\\2</span>", ‘/(?<!\\\\)\[font(?::\w+)?=(.*?)\](.*?)\[\/font(?::\w+)?\]/si‘ => "<span style="font-family:\\1">\\2</span>", ‘/(?<!\\\\)\[align(?::\w+)?=(.*?)\](.*?)\[\/align(?::\w+)?\]/si‘ => "<div style="text-align:\\1">\\2</div>", ‘/(?<!\\\\)\[b(?::\w+)?\](.*?)\[\/b(?::\w+)?\]/si‘ => "<span style="font-weight:bold">\\1</span>", ‘/(?<!\\\\)\[i(?::\w+)?\](.*?)\[\/i(?::\w+)?\]/si‘ => "<span style="font-style:italic">\\1</span>", ‘/(?<!\\\\)\[u(?::\w+)?\](.*?)\[\/u(?::\w+)?\]/si‘ => "<span style="text-decoration:underline">\\1</span>", ‘/(?<!\\\\)\[center(?::\w+)?\](.*?)\[\/center(?::\w+)?\]/si‘ => "<div style="text-align:center">\\1</div>", //
Код:
 & [sql]
 ‘/(?<!\\\\)\[sql(?::\w+)?\](.*?)\[\/sql(?::\w+)?\]/sie‘								 => "highlight_sql(‘\\1‘);",
 ‘/(?<!\\\\)\[code(?::\w+)?\](.*?)\[\/code(?::\w+)?\]/sie‘							 => "highlight_code(‘\\1‘);",
 ‘/(?<!\\\\)\[php(?::\w+)?\](.*?)\[\/php(?::\w+)?\]/ise‘								 => "highlight_php(‘\\1‘);",
// [email]
 ‘/(?<!\\\\)\[email(?::\w+)?\](.*?)\[\/email(?::\w+)?\]/si‘							 => "<a href="mailto:\\1" class="bb-email">\\1</a>",
 ‘/(?<!\\\\)\[email(?::\w+)?=(.*?)\](.*?)\[\/email(?::\w+)?\]/si‘							 => "<a href="mailto:\\1" class="bb-email">\\2</a>",
// [url]
 ‘/(?<!\\\\)\[url(?::\w+)?\]www\.(.*?)\[\/url(?::\w+)?\]/si‘							 => "<a href="http://www.\\1" target="_blank" class="bburl">\\1</a>",
 ‘/(?<!\\\\)\[url(?::\w+)?\](.*?)\[\/url(?::\w+)?\]/si‘								 => "<a href="\\1" target="_blank" class="bb-url">\\1</a>",
 ‘/(?<!\\\\)\[url(?::\w+)?=(.*?)?\](.*?)\[\/url(?::\w+)?\]/si‘							 => "<a href="\\1" target="_blank" class="bb-url">\\2</a>",
// [img]
 ‘/(?<!\\\\)\[img(?::\w+)?\](.*?)\[\/img(?::\w+)?\]/si‘								 => "<img src="\\1" alt="\\1" class="bb-image" />",
 ‘/(?<!\\\\)\[img(?::\w+)?=(.*?)x(.*?)\](.*?)\[\/img(?::\w+)?\]/si‘						 => "<img width="\\1" height="\\2" src="\\3" alt="\\3"class="bb-image" />",
// [quote]
 ‘/(?<!\\\\)\[quote(?::\w+)?\](.*?)\[\/quote(?::\w+)?\]/si‘							 => "<div>Quote:<div class="bb-quote">\\1</div></div>",
 ‘/(?<!\\\\)\[quote(?::\w+)?=(?:"|"|\‘)?(.*?)["\‘]?(?:"|"|\‘)?\](.*?)\[\/quote\]/si‘			 => "<div>Quote \\1:<divclass="bb-quote">\\2</div></div>",
// 
    ‘/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\*(?::\w+)?\](.*?)(?=(?:\s*<br\s*\/?>\s*)?\[\*|(?:\s*<br\s*\/?>\s*)?\[\/?list)/si‘ => "\n<li class="bb-listitem">\\1</li>", ‘/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\/list(:(?!u|o)\w+)?\](?:<br\s*\/?>)?/si‘ => "\n</ul>", ‘/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\/list:u(:\w+)?\](?:<br\s*\/?>)?/si‘ => "\n</ul>", ‘/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\/list:o(:\w+)?\](?:<br\s*\/?>)?/si‘ => "\n</ol>", ‘/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(:(?!u|o)\w+)?\]\s*(?:<br\s*\/?>)?/si‘ => "\n<ul class="bb-list-unordered">", ‘/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list:u(:\w+)?\]\s*(?:<br\s*\/?>)?/si‘ => "\n<ul class="bb-list-unordered">", ‘/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list:o(:\w+)?\]\s*(?:<br\s*\/?>)?/si‘ => "\n<ol class="bb-list-ordered">", ‘/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=1\]\s*(?:<br\s*\/?>)?/si‘ => "\n<ol class="bb-list-ordered,bb-listordered-d">", ‘/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=i\]\s*(?:<br\s*\/?>)?/s‘ => "\n<ol class="bb-list-ordered,bb-listordered-lr">", ‘/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=I\]\s*(?:<br\s*\/?>)?/s‘ => "\n<ol class="bb-list-ordered,bb-listordered-ur">", ‘/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=a\]\s*(?:<br\s*\/?>)?/s‘ => "\n<ol class="bb-list-ordered,bb-listordered-la">", ‘/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=A\]\s*(?:<br\s*\/?>)?/s‘ => "\n<ol class="bb-list-ordered,bb-listordered-ua">", // escaped tags like \, \[color], \[url], ... ‘/\\\\(\[\/?\w+(?::\w+)*\])/‘ => "\\1" ); $message = preg_replace(array_keys($preg), array_values($preg),$message); return $message; } /////////////////// function highlight_php($str) { $tags_exists = true; $res = htmlspecialchars($str); $res = str_replace(array(‘<?php‘, ‘<?‘, ‘?>‘, ‘->‘,‘=>‘), array(‘<?php‘, ‘<?‘, ‘?>‘, ‘->‘, ‘=>‘), $res); if(strpos(‘<?‘, $res) === false) { $res = ‘<?php ‘.$res.‘ ?>‘; $tags_exists = false; } $res = ‘<div class="bb-php">‘.highlight_string($res, true).‘</div>‘; if(!$tags_exists) { $res = str_replace(array(‘<?php‘, ‘<?‘, ‘?>‘, ‘<br/>‘), array(‘‘, ‘‘, ‘‘, ‘‘), $res); } return $res; } //////////////// function highlight_code($str) { $res = ‘<div class="bb-code">‘.htmlspecialchars($str).‘</div>‘; return $res; } //////////// function highlight_sql($str) { $words = array(‘add‘, ‘auto_increment‘, ‘all‘, ‘alter‘, ‘analyze‘, ‘and‘,‘as‘, ‘asc‘, ‘before‘, ‘between‘, ‘bigint‘, ‘binary‘,‘blob‘,‘both‘, ‘by‘, ‘cascade‘, ‘case‘, ‘change‘, ‘character‘,‘check‘, ‘collate‘, ‘column‘, ‘columns‘, ‘constraint‘, ‘convert‘,‘create‘, ‘cross‘, ‘current_date‘, ‘current_time‘,‘current_timestamp‘,‘current_user‘, ‘database‘, ‘databases‘, ‘day_hour‘,‘day_microsecond‘, ‘day_minute‘, ‘day_second‘, ‘dec‘, ‘decimal‘, ‘default‘,‘delayed‘,‘delete‘, ‘desc‘, ‘describe‘, ‘distinct‘,‘distinctrow‘, ‘div‘,‘double‘, ‘drop‘, ‘dual‘, ‘else‘, ‘enclosed‘,‘escaped‘, ‘exists‘, ‘explain‘, ‘false‘, ‘fields‘, ‘float‘, ‘float4‘,‘float8‘, ‘for‘, ‘force‘, ‘foreign‘, ‘from‘, ‘fulltext‘, ‘grant‘,‘group‘, ‘having‘, ‘high_priority‘, ‘hour_microsecond‘, ‘hour_minute‘,‘hour_second‘,‘if‘, ‘ignore‘, ‘in‘, ‘index‘, ‘infile‘, ‘inner‘,‘insert‘, ‘int‘,‘int1‘, ‘int2‘, ‘int3‘, ‘int4‘, ‘int8‘, ‘integer‘,‘interval‘,‘into‘, ‘is‘, ‘join‘, ‘key‘, ‘keys‘, ‘kill‘, ‘leading‘,‘left‘, ‘like‘, ‘limit‘, ‘lines‘, ‘load‘, ‘localtime‘,‘localtimestamp‘,‘lock‘, ‘long‘, ‘longblob‘, ‘longtext‘, ‘low_priority‘,‘match‘, ‘mediumblob‘, ‘mediumint‘, ‘mediumtext‘, ‘middleint‘,‘minute_microsecond‘, ‘minute_second‘, ‘mod‘,‘natural‘, ‘not‘,‘no_write_to_binlog‘, ‘null‘, ‘numeric‘, ‘on‘, ‘optimize‘,‘option‘, ‘optionally‘, ‘or‘, ‘order‘, ‘outer‘,‘outfile‘,‘precision‘, ‘primary‘, ‘privileges‘, ‘procedure‘,‘purge‘, ‘raid0‘,‘read‘, ‘real‘, ‘references‘, ‘regexp‘, ‘rename‘,‘replace‘, ‘require‘, ‘restrict‘, ‘revoke‘, ‘right‘, ‘rlike‘,‘second_microsecond‘,‘select‘, ‘separator‘, ‘set‘, ‘show‘, ‘smallint‘,‘soname‘, ‘spatial‘,‘sql_big_result‘, ‘sql_calc_found_rows‘,‘sql_small_result‘, ‘ssl‘, ‘starting‘, ‘straight_join‘, ‘table‘, ‘tables‘,‘terminated‘, ‘then‘,‘tinyblob‘, ‘tinyint‘, ‘tinytext‘, ‘text‘, ‘to‘,‘trailing‘, ‘true‘,‘union‘, ‘unique‘, ‘unlock‘, ‘unsigned‘, ‘update‘, ‘usage‘, ‘use‘,‘using‘, ‘utc_date‘, ‘utc_time‘, ‘utc_timestamp‘,‘values‘, ‘varbinary‘,‘varcharacter‘, ‘varchar‘, ‘varying‘, ‘when‘, ‘where‘,‘with‘,‘write‘, ‘x509‘, ‘xor‘, ‘year_month‘, ‘zerofill‘,‘char‘ ); foreach ($words as $word) { $patterns[] = ‘/\b‘.$word.‘\b/i‘; $WORDS[] = ‘<span class="bb-sql-word">‘.strtoupper($word).‘</span>‘; } $res = ‘<div class="bb-sql">‘.preg_replace($patterns, $WORDS,$str).‘</div>‘; return $res; } /* Ну, и, в финале, приведу список всех bb-кодов, которые умеет обрабатывать этот набор функций: • [color=...]...[/color] – подкрашивает текст в указанный цвет • [size=...]...[/size] – задает шрифту определенный размер • [font=...]...[/font] – задает гарнитуру шрифта • [align=...]...[/align] – задает выравнивание текста (left, right, center, justify) • [b]... – жирный текст • ... – наклонный шрифт • ... – подчеркивание •
    ...
    – выравнивание по центру • [sql]...[/sql] – раскраска SQL запроса • [code]...
– вывод на экран произвольного кода, в том числе и HTML • [php]...[/php] – раскраска PHP скрипта • [email=...]...[/email] или [email]...[/email] – ссылка на е-маил адрес • [url=...]...[/url] – ссылка на какой-то сайт •
– вывод картинки • [quote]...[/quote] – цитата • [list=...]... – нумерованный список Посмотрев, как реализован этот набор bb-кодов, вы легко сможете создать свои. */ ?>
Неизвестный
10.10.2006, 02:59
общий
это ответ
Здравствуйте, Алексеенко С.Ю.!
Посмотрите приложение в ответе Рустама, если что-то станет непонятно то пишите в минм-форум.
Просто я не смог отправить свой ответ полностью.

Неизвестный
21.12.2006, 11:05
общий
2<b>Асташов Андрей Александрович</b>Чтобы мини-форум пропускал теги, писать надо как в html-коде:< – <> – >Неужели у вас под рукой нет парсера, например, на Perl, для вставления "исходников" на html в html же страницы?
Форма ответа