有没有人使用过一个好的Java BBCode实现? 我正在查看:
- javabbcode :没什么可看的
- kefir-bb :标记为Alpha版本
- JBoss源代码中的BBCode解析器。
是否有更好的选择?
有没有人使用过一个好的Java BBCode实现? 我正在查看:
是否有更好的选择?
KefirBB 0.6已不再被列为beta版。我发现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;
}
顺便提一下,javaBBcode是一个开源项目的一部分:JavaBB。
我认为更好的选择是使用维基标记语言。
除非您有非技术用户习惯于bbcode,而且对学习另一种奇怪的标记语言不是很感兴趣。
我以前成功地使用正则表达式在html和bbcode之间进行转换。定义一个涵盖每个标签的表达式列表,并为每个表达式预编译模式。然后迭代地使用每个表达式来转换字符串。可以双向转换。性能实际上相当不错,而且您可以轻松适应自己的方言/扩展。
缺点是正则表达式并不总是容易理解。
java.beans.introspector
而崩溃。因此,它的实用性似乎受到限制。 - Agent_Ljlink
来创建自定义JDK,而您自定义JDK中的模块缺少Java beans包。 - voidmainprime-transformer
。你可以使用它,提取代码,或者直接fork prime-transformer
来在Android中使用。https://github.com/Ndersam/amebo。请查看`amebo/core/src/main/java/com/amebo/core/`。 - robotdan