Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.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 从字符串中删除斜体和粗体html标记?_Java_Html_Regex - Fatal编程技术网

Java 从字符串中删除斜体和粗体html标记?

Java 从字符串中删除斜体和粗体html标记?,java,html,regex,Java,Html,Regex,删除粗体和斜体的安全方法是什么 String text = "<b>Remove <i>bold</i> and italics</b>"; System.out.println(text); text = text.replaceAll("\\<.*?\\>", ""); //remove all but only want to remove b and i? Syst

删除粗体和斜体的安全方法是什么

        String text = "<b>Remove <i>bold</i> and italics</b>";
        System.out.println(text);
        text = text.replaceAll("\\<.*?\\>", ""); //remove all but only want to remove b and i?
        System.out.println(text);
String text=“删除粗体和斜体”;
System.out.println(文本);
text=text.replaceAll(“\\”,“”)//删除所有但只想删除b和i?
System.out.println(文本);

而且,更具可扩展性(如果我想包括其他标记,如“strong”或“em”,并允许区分大小写的“b”与“b”等)?

与其使用正则表达式解析HTML,不如使用类似
JSoup
库的东西,让您的生活更轻松,更具可扩展性。下面是一些示例代码

   Document doc = Jsoup.parse(content);
   Elements elements = doc.getElementsByTag("b");
   for (Element pre : elements) {
             pre.remove();
    }
若要删除斜体,请将
的“b”替换为
的“i”

更新

我没有测试以下代码,但它可能会工作

JSoup允许像css选择器一样进行选择,因此类似于
doc.select(“strong,em,b,i”)应返回
元素


您可以使用这个正则表达式:

代码:

    String text = "<b>Remove <i>bold</i> and italics</b>"; 
    text = text.replaceAll("<\\/?[bi]>", "");  
    System.out.println(text);
如果要匹配不区分大小写的,则可以使用
(?i)

解释


您可以使用
Jsoup
清除
空白
<代码>空白
是可扩展的,以包括也将被忽略的属性

根据这里的javadoc

白名单定义允许通过哪些HTML(元素和属性) 清洁工。其他一切都被删除了

如果你需要让更多的人通过(请小心!),调整一个基础 白名单包括:

  • addTags(java.lang.String…)
  • addAttributes(java.lang.String、java.lang.String…)
  • AddInforcedAttribute(java.lang.String、java.lang.String、java.lang.String)
  • addProtocols(java.lang.String、java.lang.String、java.lang.String…)
在代码中:

String text = "<b>Remove <i>bold</i> and italics</b>";
        System.out.println(text);
        String doc =  Jsoup.clean(text, new Whitelist());
        System.out.println(doc);
String text=“删除粗体和斜体”;
System.out.println(文本);
字符串doc=Jsoup.clean(文本,新白名单());
系统输出打印项次(doc);
给出:

<b>Remove <em>bold</i> and italics</b>
Remove bold and italics
删除粗体和斜体
删除粗体和斜体

更安全的方法绝对不是使用正则表达式。为了安全起见,请使用HTM/XML解析器。顺便说一句,您的正则表达式正在删除所有HTML标记,而不仅仅是粗体、斜体等等@anubhava:在他的情况下,我相信正则表达式可以使用。请看,这仍然有点不安全,并且只有在输入HTML格式正确时才是正确的。如果HTML中缺少关闭
怎么办?thx,是否有某种白名单,我可以在其中指定“b”和“I”以及“em”和“strong”等,并且只替换一个?我如何能够一次替换所有的元素,而不是基于每个getElementsByTag()指定标记类型而进行n次迭代?是的,我喜欢这样!它足够明确和简单,特别是考虑到简单的输入。thx用于简洁准确的答案摘要!=)以下内容如何(如果\\不起作用)…text=text.replaceAll(“,”)@是的,你也可以这样用。在某些语言中(不同的regex-falour)/“意思是不同的,这就是为什么我也删掉了它。
<b>Remove <em>bold</i> and italics</b>
Remove bold and italics