Java регулярное выражение заменить все теги HTML, кроме BR - PullRequest
0 голосов
/ 18 ноября 2011

Мне нужно регулярное выражение, которое можно использовать с replaceall, чтобы заменить все теги html пустой строкой, за исключением любых вариантов br, чтобы сохранить разрывы строк.

Я нашел следующее, чтобы заменить все теги HTML <\ S * ш \ s * \ [^>]

Ответы [ 2 ]

4 голосов
/ 18 ноября 2011

Вы можете получить некоторые ответы, которые утверждают, что работают.

Эти ответы могут даже работать для конкретных случаев, с которыми вы их пытаетесь.

Но знайте, что регулярные выражения (которые мне нравятсяв общем) являются неподходящим инструментом для работы в этом случае.

А поскольку ваш проект развивается и должен охватывать более сложные входные данные HTML, регулярное выражение будет становиться все более и более запутанным, и вполне может прийтивремя, когда оно просто не может решить вашу проблему, период.

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

Для справки, вот несколько связанных SO сообщений:

1 голос
/ 18 ноября 2011

Если известно, что HTML-код допустим, то вы можете использовать это регулярное выражение (без учета регистра):

<(?!br\b)/?[a-z]([^"'>]|"[^"]*"|'[^']*')*>

, но он может потерпеть неудачу интересными способами, если вы укажете ему недействительный HTML-код.Кроме того, я взял буквально «HTML-теги»;вышеописанное не будет охватывать <!-- HTML comments --> и <!DOCTYPE declarations> и не будет преобразовывать <![CDATA[ blocks ]]> и &entity; s в простой текст.

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

ОБНОВЛЕНИЕ : я только что понял, что даже для корректного HTML приведенное выше имеет некоторые серьезные ограничения.Например, он будет неправильно обрабатывать что-то вроде <!--<yes--> (преобразуя его в <!--), а также что-то вроде <script><foo></script> (поскольку собственно HTML имеет небольшое количество тегов с содержимым CDATA, то есть все посленачальный тег до тех пор, пока первый </ не будет принят за символьные данные, не содержащие теги HTML; к счастью, XHTML был вынужден избавиться от этой концепции из-за отсутствия поддержки XML в ней).Конечно, оба эти ограничения можно устранить - используя больше регулярных выражений!- но они должны помочь подчеркнуть тот факт, что вы должны использовать хорошо протестированную библиотеку обработки HTML, а не пытаться создавать собственные регулярные выражения.Если у вас есть много гарантий относительно характера HTML, который вы пытаетесь обработать, то регулярные выражения могут быть полезны;но если то, что вы пытаетесь сделать, это удалить произвольные теги, то это хороший признак того, что у вас нет таких гарантий.

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