SyntaxHighlighter BBCode PHP

У меня проблемы с BBCode, который я создал для использования с SyntaxHighlighter

function bb_parse_code($str) {
    while (preg_match_all('`\[(code)=?(.*?)\]([\s\S]*)\[/code\]`', $str, $matches)) foreach ($matches[0] as $key => $match) {
        list($tag, $param, $innertext) = array($matches[1][$key], $matches[2][$key], $matches[3][$key]); 
        switch ($tag) {
            case 'code': $replacement = '<pre class="brush: '.$param.'">'.str_replace("    ", " ", str_replace(array("<br>", "<br />"), "\n", $innertext))."</pre>"; break;

        }
        $str = str_replace($match, $replacement, $str);
    }
    return $str;
}

И у меня есть bbcode:

[b]bold[/b]
[u]underlined[/u]
[code=js]function (lol) {
alert(lol);
}[/code]
[b]bold2[/b]
[code=php]
<? echo 'lol' ?>
[/code]

Который возвращает это:BB-коды

Я знаю, что проблема на ([\s\S]*) регулярного выражения, которое допускает любой символ, но как заставить код работать с переносами строк?

1 ответ

Решение

Вы должны использовать следующий шаблон:

`\[(code)=?(.*?)\](.*?)\[/code\]`s

Пара изменений:

Другие вопросы по тегам