Если известно, что 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, который вы пытаетесь обработать, то регулярные выражения могут быть полезны;но если то, что вы пытаетесь сделать, это удалить произвольные теги, то это хороший признак того, что у вас нет таких гарантий.