Как сделать регулярное выражение сопоставления с образцом для тегов HTML? - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь сопоставить шаблон для получения тега и данных между двумя тегами 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 голосов
/ 13 марта 2019

хорошо, после того, как попробуем какой-то шаблон, я найду что-то вроде этого, которое отлично работает для меня:

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

, как @JGNI предложил, что мы должны избегать этого, но сейчас это правильно для моих требований, если у кого-то есть какие-толучший вариант, пожалуйста, направьте меня, чтобы он мог помочь и другим.

0 голосов
/ 25 февраля 2019

Ни при каких обстоятельствах не пытайтесь анализировать HTML с помощью регулярного выражения, если вы не хотите вызывать обряд 6 6 6 Ph'nglui mglw 'nafh Cthulhu R'lyeh wgah'nagl fhtagn.

Используйте библиотеку HTML для разбора, см. эту страницу , чтобы узнать, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...