Sting Builder - удалите все HTML-теги, кроме <br> - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть объект строителя строк "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.

Я пытался использовать приведенный ниже код для удаления всех тегов html из объекта sb, но, похоже, он не работает.Также не уверен, как сделать исключение для тега br.

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

Ответы [ 2 ]

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

Как мы все знаем, синтаксический анализ HTML с помощью регулярных выражений настоятельно не рекомендуется, если вы пытаетесь захватить полные данные тега и пытаетесь манипулировать ими.Но если вы пытаетесь просто удалить все теги или условно некоторые теги, как в этом случае, вы хотите удалить все теги, кроме тега <br>, вы можете использовать это регулярное выражение,

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

Объяснение:

  • < - Совпадение начала тега
  • \/? - При желании совпадение / с соответствующим закрывающим тегом
  • (?!br>) - отклонить совпадение, если имя тега равно br
  • \w+ - сопоставить любое имя тега, состоящее из символов слова
  • [^>]* - дополнительно разрешить атрибутам тега совпадать
  • > - совпадение закрытия тега

Демо

Примеры кодов 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+[^>]*>

Демонстрация, допускающее необязательный пробел в теге br

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

анализ HTML с использованием regex не очень хорошая идея.если вы уверены, что это 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>

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