有没有人使用过良好的BBCode Java实现?我在看
还有更好的选择吗?
答案 0 :(得分:17)
当前版本的KefirBB 0.6不再列为测试版。我发现KefirBB解析器非常容易配置和扩展我自己的标签:
(这是我迄今为止发现的最好的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;
}
BTW javaBBcode是开源项目的一部分:JavaBB。
答案 1 :(得分:3)
我认为更好的选择是使用wiki标记。您可以尝试我目前使用的Mylyn Wikitext软件包,并在我们的文档系统中取得巨大成功。
但是,如果你尝试解析一些你自己已经拥有的论坛文本,这不是你问题的答案:-I
答案 2 :(得分:3)
我相信更好的选择是使用 维基标记
除非您有非技术用户习惯使用bbcode并且对学习其他神秘标记格式不感兴趣。
我过去成功使用正则表达式来翻转html和bbcode。定义覆盖每个标记的表达式列表,并为每个标记预编译模式。然后使用每个表达式迭代转换字符串。两种方式都有效。性能实际上非常好,您可以轻松地适应自己的方言/扩展。
缺点是正则表达式并不总是很容易解决。
答案 3 :(得分:2)
BBCode解析和转换为HTML的另一个Java选项是Prime Transformer。
https://github.com/inversoft/prime-transformer
我们为某些特定用途构建了这个,但是试图保持它的通用性以供一般消费使用。我已经有一个基本的例子,说明如何将它放在GitHub的登陆页面上。