无法使用模式匹配删除java中出现的所有html标记

时间:2013-12-12 09:06:49

标签: java html regex

我有很长的html字符串,有多个

             <dl id="divmap"> .... </dl>.

我想删除它之间的所有内容。

我在java中编写了这段代码:

                                   String triphtml= htmlString;
                System.out.println("triphtml is "+triphtml);

                System.out.println("test1 ");
                final Pattern pattern = Pattern.compile("(<dl id=\""+selectedArray[i]+"\">)(.+?)(</dl>)",
                        Pattern.DOTALL);
                final Matcher matcher = pattern.matcher(triphtml);
                // matcher.find();
                System.out.println("pattern of test1 is : "
                        + pattern); // Prints
                System.out.println("MATCHER of test1 is : "
                        + matcher); // Prints
                System.out.println("MATCH COUNT of test1 a: "
                        + matcher.groupCount()); // Prints
                System.out.println("MATCH COUNT of test1  a: "
                        + matcher.find()); // Prints
                while (matcher.find()) {
                    // System.out.println("MATCH GP 3: "+matcher.group(3).substring(1,10));

                    for (int z = 0; z <= matcher.groupCount(); z++) {
                        String extstr = matcher.group(z);
                        System.out.println("matcher group of "+z+" test1  is " + extstr);
                        System.out.println("ext a of test1  is " + extstr);
                        triphtml = triphtml.replaceAll(extstr, "");
                        System.out.println("Group found of test1 is :\n" + extstr);
                    }

                }

但是这段代码删除了一些dl,还有一些遗留在triphtml中。 我不知道为什么会发生这件事。 这里triphtml是一个html字符串,有多个dl。请帮助我如何删除所有

之间的内容
    <dl id="divmap">.

提前致谢。

3 个答案:

答案 0 :(得分:1)

我建议不要在html中使用正则表达式。只需使用任何用于遍历xml / html的库。

例如JSoup

答案 1 :(得分:0)

使用正则表达式,您可以执行以下操作:

String orgString = "<dl id=\"divmap\"> .... </dl>";

orgString = orgString.replaceAll("<[^>]*>", "");
//for removing html tag

orgString = orgString.replaceAll(orgString.replaceAll("<[^>]*>", ""),"");
//for removing content inside html tag

但最好使用html parsing

修改

String htmlString = "<dl id=\"divmap\"> Content </dl>";
Pattern p = Pattern.compile("<[^>]*>");
Matcher m = p.matcher(htmlString);
while(m.find()){
    htmlString = htmlString.replaceAll(m.group(), "");
}
System.out.println("Ans"+htmlString);

答案 2 :(得分:0)

尝试使用JSoup

它使用selectors和JQuery之类的语法,它非常易于使用。

你可以试试这个

String triphtml = htmlString;

Document doc = Jsoup.parse(htmlString);
Elements divmaps = doc.select("#divmap");

然后你可以删除(或改变)DOM中的元素。

divmaps.remove();
triphtml = doc.html();