答案 1
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。
答案 2
我相信更好的选择是使用wiki标记。您可以尝试Mylyn Wikitext软件包,我目前在我们的文档系统中取得了巨大的成功。
但是,这不是您的问题的答案,如果您尝试的是解析一些您已经自动拥有的论坛文本:-I
推荐
-
Jackson - 递归解析成 Map<String, Object> 我试图简化我的代码:我想存储键和值(所有字符串)。 我实际上正在使用一个来存储它。hat 方式可以是值 () 或新节点 ()。 如何简化此代码?递归函数会很好。
-
-
如何轻松处理CSV文件到List<MyClass> 在我的应用程序中,我使用了很多CSV文件,我必须阅读这些文件并基于它们构建列表。我想找到一个简单的方法来做到这一点。您知道任何简单的框架在不使用配置文件等数量的情况下做到这一
-
使用 Gson 的自定义 JSON 反序列化程序 我在使用Gson解析JSON响应时遇到问题。 JSON 字符串: 但是当我使用Gson解析它时,我有一个异常。我知道这是因为响应数组第一个元素不是对象,而是整数。 所以问题是,我能以某种方式解决
-
Java - 十进制格式.parse 返回具有指定小数位数的双精度值 我希望能够在格式字符串中给定一个小数位数的情况下将字符串转换为Double。所以“###,##0.000”应该给我一个双到3位小数。 编辑 - 添加了有关所发生情况的更多信息 用户在 UI 中输入值 - 该值