есть код в тегах $fpostx ='[code-]CODE#1[/code-]\n [code-]CODE#2[/code-] '; highlight_codex - Функция подстветки кода preg_match("#\[code\](.*?)\[/code\]#si",$fpostx, $matches); $restx = highlight_codex($matches[1]); $restx - переменная показывает КОД1 далее нахожу в переменой fpostx код в тегах [code-][/code-] и заменяю на $restx (думаю ясно зачем это делается) $search[0] = "#\[code\](.*?)\[/code\]#si"; $replace[0] = $restx; $fpostx = preg_replace($search, $replace, $fpostx); Вопрос состоит в том, как избавится от того, что приходится искать по отдельности коды, т.е. мне нужен чтобы сразу все 2 и более кодов были выведены, а так получается что КОД1, два раза высвечивается.
PHP 5.3 PHP: <?php $text = "Код [code-]<?='Hello'?>[/code-] тут не код и [code-]<?php\r\necho 'abc';\r\n?>[/code-]"; $regex = '/\[code-\](.+?)\[\/code-\]/s'; $code = preg_replace_callback($regex, function($code) { return highlight_string($code[1]); }, $text); ?>
или даже так.. $replace[11] у нас хранится выразеный код из тег Код (Text): как применить функцию highlight_string, чтобы этот выразеный участок на выходе был уже "разукрашен" $search[11] = "#\[code\](.*?)\[/code\]#si"; $replace[11] = '\1';
Конечно не работает, я же написал, что для 5.3 Неужели сложно перенести на 5.2.х заменив на create_function или любой свой калбэк.