Как мы все знаем, синтаксический анализ 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