1

SyntaxHighlighterで使用するために作成したBBCodeに問題があります

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]

これはこれを返します: BBCode

問題は任意の文字を許可する正規表現にあることは知ってい([\s\S]*)ますが、コードを改行で機能させるにはどうすればよいですか?

4

1 に答える 1

1

次のパターンを使用する必要があります。

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

いくつかの変更:

于 2012-10-23T19:04:58.823 に答える