2012-10-23 24 views
1

我有一些問題,我創建與SyntaxHighlighterBBCode的SyntaxHighlighter的PHP

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; 
} 

使用BB代碼的和我有BB代碼:

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

它返回這樣的: ​​

我知道問題是在允許任何字符的正則表達式的([\s\S]*),但如何使代碼與行b一起工作reaks?

+0

對於簡單的情況,您可能可以用'(。*?)'離開,這對於任何事情來說都是非法的匹配。 – cmbuckley

+0

但是'。*?'不起作用,像是休息... –

+1

看到我的回答:-) – cmbuckley

回答