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

时间:2014-02-05 05:12:43

标签: 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?
        System.out.println(text);

此外,还有更多可扩展性(如果我想包含其他标签,如“strong”或“em”,并允许区分大小写“b”与“B”等,。)?

3 个答案:

答案 0 :(得分:7)

你可以使用这个正则表达式:
          <\/?[bi]>

DEMO

代码:

    String text = "<b>Remove <i>bold</i> and italics</b>"; 
    text = text.replaceAll("<\\/?[bi]>", "");  
    System.out.println(text);

<强>输出

Remove bold and italics

如果您希望匹配不区分大小写,则可以使用corresponding flag (?i)

<强>说明

enter image description here

答案 1 :(得分:2)

您可以使用Jsoup清除WhitespaceWhitespace是可扩展的,包括要省略的属性。

根据这里的javadoc

  

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

     

如果你需要允许更多(请小心!),调整一个基地   白名单:

     
      
  • addTags(java.lang.String中......)
  •   
  • addAttributes(java.lang.String,java.lang.String ...)
  •   
  • addEnforcedAttribute(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);

给出:

<b>Remove <em>bold</i> and italics</b>
Remove bold and italics

答案 2 :(得分:0)

使用像JSoup库之类的东西,而不是使用正则表达式来解析HTML,这将使您的生活更轻松,并使其更具可扩展性。这是一些示例代码

   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");这样的东西应该返回Elements

Link to documentation