17

有人使用过良好的 BBCode Java 实现吗?我在看

  1. javabbcode:没什么可看的
  2. kefir-bb : 列为 alpha
  3. JBoss 源代码中的 BBcode 解析器。

有没有更好的选择?

4

4 回答 4

17

当前版本的 KefirBB 0.6 不再列为测试版。我发现 KefirBB 解析器很容易使用我自己的标签进行配置和扩展:

开菲尔-bb.sourceforge.net

(这是迄今为止我发现的最好的BBCode解析器)

我还在fyhao.com找到了这段代码,但它确实可以保护您免受错误嵌套标签的影响(因此不适合解析用户输入的输入):

    public static String bbcode(String text) {
        String html = text;

        Map<String,String> bbMap = new HashMap<String , String>();

        bbMap.put("(\r\n|\r|\n|\n\r)", "<br/>");
        bbMap.put("\\[b\\](.+?)\\[/b\\]", "<strong>$1</strong>");
        bbMap.put("\\[i\\](.+?)\\[/i\\]", "<span style='font-style:italic;'>$1</span>");
        bbMap.put("\\[u\\](.+?)\\[/u\\]", "<span style='text-decoration:underline;'>$1</span>");
        bbMap.put("\\[h1\\](.+?)\\[/h1\\]", "<h1>$1</h1>");
        bbMap.put("\\[h2\\](.+?)\\[/h2\\]", "<h2>$1</h2>");
        bbMap.put("\\[h3\\](.+?)\\[/h3\\]", "<h3>$1</h3>");
        bbMap.put("\\[h4\\](.+?)\\[/h4\\]", "<h4>$1</h4>");
        bbMap.put("\\[h5\\](.+?)\\[/h5\\]", "<h5>$1</h5>");
        bbMap.put("\\[h6\\](.+?)\\[/h6\\]", "<h6>$1</h6>");
        bbMap.put("\\[quote\\](.+?)\\[/quote\\]", "<blockquote>$1</blockquote>");
        bbMap.put("\\[p\\](.+?)\\[/p\\]", "<p>$1</p>");
        bbMap.put("\\[p=(.+?),(.+?)\\](.+?)\\[/p\\]", "<p style='text-indent:$1px;line-height:$2%;'>$3</p>");
        bbMap.put("\\[center\\](.+?)\\[/center\\]", "<div align='center'>$1");
        bbMap.put("\\[align=(.+?)\\](.+?)\\[/align\\]", "<div align='$1'>$2");
        bbMap.put("\\[color=(.+?)\\](.+?)\\[/color\\]", "<span style='color:$1;'>$2</span>");
        bbMap.put("\\[size=(.+?)\\](.+?)\\[/size\\]", "<span style='font-size:$1;'>$2</span>");
        bbMap.put("\\[img\\](.+?)\\[/img\\]", "<img src='$1' />");
        bbMap.put("\\[img=(.+?),(.+?)\\](.+?)\\[/img\\]", "<img width='$1' height='$2' src='$3' />");
        bbMap.put("\\[email\\](.+?)\\[/email\\]", "<a href='mailto:$1'>$1</a>");
        bbMap.put("\\[email=(.+?)\\](.+?)\\[/email\\]", "<a href='mailto:$1'>$2</a>");
        bbMap.put("\\[url\\](.+?)\\[/url\\]", "<a href='$1'>$1</a>");
        bbMap.put("\\[url=(.+?)\\](.+?)\\[/url\\]", "<a href='$1'>$2</a>");
        bbMap.put("\\[youtube\\](.+?)\\[/youtube\\]", "<object width='640' height='380'><param name='movie' value='http://www.youtube.com/v/$1'></param><embed src='http://www.youtube.com/v/$1' type='application/x-shockwave-flash' width='640' height='380'></embed></object>");
        bbMap.put("\\[video\\](.+?)\\[/video\\]", "<video src='$1' />");

        for (Map.Entry entry: bbMap.entrySet()) {
            html = html.replaceAll(entry.getKey().toString(), entry.getValue().toString());
        }

        return html;
    }

顺便说一句,javaBBcode 是开源项目的一部分:JavaBB

于 2010-09-15T22:09:54.360 回答
3

我相信更好的选择是使用 wiki 标记。您可以尝试 Mylyn Wikitext 包,我目前在我们的文档系统中使用它取得了巨大的成功。

但是,这不是您问题的答案,如果您尝试自动解析一些您已经拥有的论坛文本:-I

于 2009-06-11T20:31:26.477 回答
3

我相信更好的选择是使用 wiki 标记

除非您有习惯 bbcode 并且对学习另一种神秘标记格式不太感兴趣的非技术用户。

我过去曾成功使用正则表达式在 html 和 bbcode 之间切换。定义涵盖每个标签的表达式列表,并为每个标签预编译模式。然后用每个表达式迭代地转换字符串。双向工作。性能实际上相当不错,您可以轻松适应自己的方言/扩展。

缺点是正则表达式并不总是很容易解决。

于 2009-07-07T14:02:09.993 回答
3

用于 BBCode 解析和转换为 HTML 的另一个 Java 选项是 Prime Transformer。

https://github.com/inversoft/prime-transformer

我们为某些特定用途构建了它,但试图保持它足够通用以供一般消费。我有一个基本示例,说明如何在 GitHub 的登录页面上将其组合在一起。

于 2014-07-30T17:56:24.170 回答