Фактически
<img src="imgtag.gif" alt="<img>" />
не является допустимым HTML, а также не является допустимым XML.
Это недопустимый XML, потому что '<' и '>' не являются допустимыми символами внутри строк атрибута. Их необходимо экранировать, используя соответствующие объекты XML & lt; и & gt;
Это также недопустимый HTML, поскольку в HTML недопустима короткая закрывающая форма (но она верна в XML и XHTML). Тег 'img' также является неявно закрытым тегом согласно спецификации HTML 4.01. Это означает, что закрытие вручную на самом деле неверно и эквивалентно закрытию любого другого тега дважды.
Правильная версия в HTML
<img src="imgtag.gif" alt="<img>">
и правильная версия в XHTML и XML
<img src="imgtag.gif" alt="<img>"/>
Приведенный ниже пример также недействителен
<
tag
attr="5"
/>
Это не допустимый HTML или XML либо. Имя тега должно быть сразу за «<», хотя атрибуты и закрывающий «>» могут быть где угодно. Таким образом, действительный XML на самом деле
<tag
attr="5"
/>
И вот еще один более забавный: вы можете выбрать «или» в качестве символа цитирования атрибута.
<img src="image.gif" alt='This is single quoted AND valid!'>
Все остальные причины, которые были опубликованы, верны, но самая большая проблема при разборе HTML заключается в том, что люди обычно не понимают все правила синтаксиса правильно. Тот факт, что ваш браузер интерпретирует ваш tagoup как HTML, не означает, что вы действительно написали правильный HTML.
Редактировать: И даже stackoverflow.com соглашается со мной относительно определения действительных и недействительных. Ваш неверный XML / HTML не выделен, а моя исправленная версия -.
По сути, XML не предназначен для анализа с помощью регулярных выражений. Но нет также причин для этого. Существует множество синтаксических анализаторов XML для каждого языка. У вас есть выбор между парсерами SAX, DOM и парсерами Pull. Все они гарантированно будут выполняться намного быстрее, чем синтаксический анализ с помощью регулярного выражения, и тогда вы можете использовать классные технологии, такие как XPath или XSLT, в получающемся дереве DOM.
Поэтому я отвечаю: не только сложно анализировать XML с помощью регулярных выражений, но и это плохая идея. Просто используйте один из миллионов существующих анализаторов XML и воспользуйтесь всеми расширенными функциями XML.
HTML слишком сложен, чтобы даже пытаться анализировать его самостоятельно. Во-первых, юридический синтаксис имеет много мелких тонкостей, о которых вы, возможно, не знаете, а во-вторых, HTML в дикой природе - это просто огромная вонючая куча (вы понимаете, мой дрейф) Существует множество библиотек синтаксического анализатора, которые хорошо справляются с обработкой HTML, например супа тегов, просто используйте их.