如何为html标签制作模式匹配正则表达式?

时间:2019-02-25 14:33:03

标签: android html regex

我正在尝试匹配用于在两个html标签之间获取标签和数据的模式。

要替换两个标签之间的数据,我想检查该模式的元素 我想制作图案正则表达式,以便我可以将其与html元素匹配并达到该点并替换标签之间的数据。

如果有人知道如何为以下html标签创建正则表达式模式。

我的HTML文件是这样的:

 <div id="frame">
            <div class="content">
                <div class="messages">
                    <ul>
                        <li class="sent">
                            <img src="http://emilcarlsson.se/assets/mikeross.png" alt="" />
                            <p>####data</p>
                        </li>
                        <li class="replies">
                            <img src="http://emilcarlsson.se/assets/harveyspecter.png" alt="" />
                            <p>####data</p>
                        </li>

                    </ul>
                </div>
            </div>
        </div>

我做了什么:

 public void readWritedatatFromHtml(){
        InputStream input;
        try {

            input = getResources().openRawResource(R.raw.view);

            int size = input.available();
            byte[] buffer = new byte[size];
            input.read(buffer);
            input.close();

            String text = new String(buffer);

            //  Pattern tags = Pattern.compile ("<div class=\"content\">+<div class=\"messages\">+<ul>");
           // Pattern tags = Pattern.compile ("<div class=\"content\">\n<div class=\"messages\">");
           // Pattern tags = Pattern.compile ("<div class=\"content\">(.*?)<ul>");


            Pattern tags = Pattern.compile ("<div class=\"messages\">.? </div>");
            Matcher m = tags.matcher(text);
            StringBuffer sb = new StringBuffer();

            while (m.find()) {
                m.appendReplacement(sb, " <ul> <li class=\"sent1\">\n" +
                        "                            <img src=\"http://emilcarlsson.se/assets/mikeross.png\" alt=\"\" />\n" +
                        "                            <p>####data</p>\n" +
                        "                        </li>");
            }

            m.appendTail(sb);
            Log.i("sb",sb.toString());

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
                    }
                    }

2 个答案:

答案 0 :(得分:1)

在任何情况下都不要尝试使用正则表达式解析HTML,除非您希望调用rite 666 Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn。

使用HTML解析库,请参见this page,了解某些实现方法。

答案 1 :(得分:0)

好吧,在尝试了某种模式之后,我发现类似这样的东西对我来说非常有用:

 Pattern tags = Pattern.compile ("<div\\s+class=\"messages\">[\\S\\s]*?<\\/div>");

正如@JGNI所建议的那样,我们应该避免这种情况,但是现在,如果有人有更好的选择,这是我的要求,请指导我,以便对其他人也有帮助。