Sting Builder-删除除<br/>之外的所有html标签

时间:2019-02-15 16:43:53

标签: java html regex string groovy

我有一个字符串生成器对象“ sb”,看起来像-

Hello.  How can I help you?<br>I don't know<br>Use the link <a 
href="www.google.com" target="_blank">Google</a><br>

这只是一个示例,它可以具有任何种类的html标签。如何从对象中删除所有可能的HTML标记(除了br标记)。

我一直在尝试使用下面的代码从sb对象中删除所有html标签,但似乎无法正常工作。另外,不确定如何为br标签设置例外。

sb.replaceAll("<.*?>", "");

2 个答案:

答案 0 :(得分:2)

就像我们都知道的那样,如果您试图捕获完整的标记数据并尝试对其进行操作,则强烈不建议使用正则表达式解析HTML。但是,如果您要剥离所有标签,或者有​​条件地剥离一些标签,例如在这种情况下,您想删除除<br>标签之外的所有标签,则可以使用此正则表达式,

<\/?(?!br>)\w+[^>]*>

说明:

  • <-标记的匹配开始
  • \/?-(可选)匹配/以匹配结束标记
  • (?!br>)-如果标记名称为br
  • ,则拒绝匹配
  • \w+-匹配由单词字符组成的任何标签名称
  • [^>]*-(可选)允许标签属性匹配
  • >-标记的匹配结束

Demo

示例Java代码,

String s = "Hello.  How can I help you?<br>I don't know<br>Use the link <a \r\n" + 
        "href=\"www.google.com\" target=\"_blank\">Google</a></br>Hello.  <sometag>somedata</sometag> hey <br1>somedata</br2> hello <1br>somedata</1br> How can I help you?<br>I don't know<br>Use the link <a \r\n" + 
        "href=\"www.google.com\" target=\"_blank\">Google</a></br>";

System.out.println(s.replaceAll("</?(?!br>)\\w+[^>]*>", ""));

将其打印在其中,以删除除<br></br>以外的所有标签,

Hello.  How can I help you?<br>I don't know<br>Use the link Google</br>Hello.  somedata hey somedata hello somedata How can I help you?<br>I don't know<br>Use the link Google</br>

编辑:如Lino在他的评论中所述,如果您的标签名称在br文本周围有可选的空格,则可以使用以下正则表达式来允许可选的空格,

<\s*\/?\s*(?!br\s*>)\w+[^>]*>

Demo allowing optional space in br tag

答案 1 :(得分:0)

使用regex解析HTML不是一个好主意。如果您确定它始终是HTML,我建议您使用Jsoup,它将自动使用您的html并退还文档。

Document doc = Jsoup.parse(sb.toString());
printChilds(doc.body().childNodes());

    public static void printChilds(List<Node> node)
    {
        for (Node n : node)
        {
            if (n.childNodeSize() == 0)
                System.out.print(n.toString());
            else
                printChilds(n.childNodes());
        }
    }

将输出Hello. How can I help you?<br>I don't know<br>Use the link Google<br>