首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SyntaxHighlighter BBCode PHP

SyntaxHighlighter BBCode PHP
EN

Stack Overflow用户
提问于 2012-10-24 02:55:06
回答 1查看 341关注 0票数 1

我在创建用于SyntaxHighlighter的BBCode时遇到一些问题

代码语言:javascript
复制
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:

代码语言:javascript
复制
[b]bold[/b]
[u]underlined[/u]
[code=js]function (lol) {
alert(lol);
}[/code]
[b]bold2[/b]
[code=php]
<? echo 'lol' ?>
[/code]

这将返回以下内容:

我知道问题出在允许任何字符的正则表达式的([\s\S]*)上,但是如何让代码在换行的情况下工作呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-24 03:04:59

您应该使用以下模式:

代码语言:javascript
复制
`\[(code)=?(.*?)\](.*?)\[/code\]`s

有几个变化:

末尾的switch to

  • to match new lines too.

s修饰符,这会导致. to match new lines too.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13037243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档