Как удалить все HTML-теги, кроме IMG? - PullRequest
4 голосов
/ 21 июля 2010

Я получил некоторый HTML-текст, который содержит все виды HTML-тегов, таких как <table>, <a>, <img> и т. Д.

Теперь я хочу использовать регулярное выражение для удаления всех HTML-тегов, кроме <img ...> и </img> (и верхний регистр <IMG></IMG>).

Как это сделать?


ОБНОВЛЕНИЕ:

MyЗадача очень проста, она просто печатает текстовое содержимое (включая изображения) html в виде сводки на главной странице, поэтому я думаю, что регулярное выражение - это хорошо и достаточно просто.


ОБНОВЛЕНИЕ СНОВА

Возможно, образец поможет лучше понять мой вопрос:)

Есть несколько html-текстов:

<html>
  <head></head>
  <body>
     Hello, everyone. Here is my photo: <img src="xxx.jpg" />. 
     And, <a href="xxx">know more</a> about me!
  </body>
</html>

Я хочу сохранить и удалить другие теги.Вот что я хочу:

Hello, everyone. Here is my photo: <img src="xxx.jpg" />. And, know more about me!

Теперь я кодирую так:

html.replaceAll("<.*?>", "")

Но это удалит весь контент между < и >, но я хочуоставьте <img xxx> и </img> и удалите другое содержимое между < and >

Спасибо всем!

Ответы [ 4 ]

10 голосов
/ 21 июля 2010

Я много пробовал, мне кажется, это регулярное выражение работает:

(?i)<(?!img|/img).*?>

Мой код:

html.replaceAll('(?i)<(?!img|/img).*?>', '');
4 голосов
/ 21 июля 2010

Не используйте RegEx для разбора HTML.См. здесь для убедительной демонстрации того, почему.

Используйте анализатор HTML для вашего языка / платформы.

  • Здесь - это Javaone (HTML parser)
  • Для .NET рекомендуется Agility Pack *1013*
  • Для ruby ​​есть nokogiry , хотя я неRuby Dev, так что не знаю, насколько это хорошо
1 голос
/ 21 июля 2010

Простой ответ на вопрос, почему не используйте RegEx:

Regexp не может разобрать рекурсивную грамматику, такую ​​как:

S -> (S)
S -> Empty

Потому что этот вид грамматики имеет бесконечное состояние.

Поскольку HTML имеет рекурсивную грамматику, вы можете просто использовать регулярное выражение.

SPAN -> <span>SPAN</span>
SPAN -> text

Но в вашем случае вы можете выразить регулярное выражение, которое не является рекурсивным.

0 голосов
/ 21 июля 2010
<(img|IMG)*>*</(img|IMG)>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...