Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java代码库_Java_Parsing_Bbcode - Fatal编程技术网

Java代码库

Java代码库,java,parsing,bbcode,Java,Parsing,Bbcode,有人使用过BBCode的良好Java实现吗?我在看 :没什么可看的 :列为alpha JBoss源代码中的BBcode解析器 还有更好的选择吗?我认为更好的选择是使用wiki标记。您可以尝试Mylyn Wikitext软件包,我目前在我们的文档系统中非常成功地使用了该软件包 然而,这并不是你问题的答案,如果你试图解析一些你已经自动拥有的论坛文本:-I 我认为更好的选择是使用 维基标记 除非您的非技术用户习惯于bbcode,并且对学习另一种神秘的标记格式不太感兴趣 我过去曾成功地使用正则表达式在h

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

  • :没什么可看的
  • :列为alpha
  • JBoss源代码中的BBcode解析器

  • 还有更好的选择吗?

    我认为更好的选择是使用wiki标记。您可以尝试Mylyn Wikitext软件包,我目前在我们的文档系统中非常成功地使用了该软件包

    然而,这并不是你问题的答案,如果你试图解析一些你已经自动拥有的论坛文本:-I


    我认为更好的选择是使用 维基标记

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

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


    缺点是正则表达式并不总是简单易懂。

    当前版本的kefirbb0.6不再列为beta版。我发现KefirBB解析器非常容易配置,并且可以使用我自己的标记进行扩展:

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

    我在中也发现了这段代码,但它确实可以防止错误嵌套的标记(因此不适合解析用户输入的输入):

    公共静态字符串bbcode(字符串文本){
    字符串html=文本;
    Map bbMap=newhashmap();
    bbMap.put(“(\r\n |\r |\n |\n\r)”,“
    ”; bbMap.put(“\\[b\\](.+?)\\[/b\\]”,“$1”; bbMap.put(“\\[i\\](.+?)\\[/i\\]”,“$1”); bbMap.put(“\\[u\\](.+?)\\[/u\\]”,“$1”); bbMap.put(“\\[h1\\](.+?)\\[/h1\\]”,“$1”); bbMap.put(“\\[h2\\](.+?)\\[/h2\\]”,“$1”); bbMap.put(“\\[h3\\](.+?)\\[/h3\\],“$1”); bbMap.put(“\\[h4\\](.+?)\\[/h4\\],“$1”); bbMap.put(“\\[h5\\](.+?)\\[/h5\\],“$1”); bbMap.put(“\\[h6\\](.+?)\\[/h6\\],“$1”); bbMap.put(“\\[quote\\](.+?)\\[/quote\\]”,“$1”); bbMap.put(“\\[p\\](.+?)\\[/p\\]”,“$1

    ”; bbMap.put(“\\[p=(.+?),(.+?)\\](.+?)\\[/p\]”,“

    $3

    ”; bbMap.put(“\\[center\\](.+?)\\[/center\\]”,“$1”); bbMap.put(“\\[align=(.+?)\\]”(.+?)\\[/align\\]”,“$2”); bbMap.put(“\\[color=(.+?)\\]”(.+?)\\[/color\\]”,“$2”); bbMap.put(“\\[size=(.+?)\\](.+?)\\[/size\\]”,“$2”); bbMap.put(“\\[img\\](.+?)\\[/img\\],”); bbMap.put(“\\[img=(.+?),(.+?)\\](.+?)\\[/img\\],”); bbMap.put(“\\[email\\](.+?)\\[/email\\],”); bbMap.put(“\\[email=(.+?)\\](.+?)\\[/email\\],”); bbMap.put(“\\[url\\](.+?)\\[/url\\],”); 放置(“\\[url=(.+?)\\](.+?)\\[/url\\]”,”); bbMap.put(“\\[youtube\\](.+?)\\[/youtube\\],”); bbMap.put(“\\[video\\](.+?)\\[/video\\],”); 对于(Map.Entry:bbMap.entrySet()){ html=html.replaceAll(entry.getKey().toString(),entry.getValue().toString()); } 返回html; }

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

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


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

    Wiki标记是一个好主意。我的目的是使我所处理的应用程序中的文本格式机制标准化。现在,我们允许用户输入任何内容,然后通过白名单标记执行所有清理。允许BBCode/Wiki标记对我来说似乎是一个更好的主意。你找到BBCode解析器/库了吗?我尝试了KefirBB,它很容易使用,当前的0.6版本没有列为beta版。看起来KefirBB已经移动到GitHub,并且正在积极开发中。你是说“它不保护你”吗?不知道为什么这个响应会被否决,因为这个库是开源的,并且处理非常复杂的代码。
        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;
        }