Realmente
<img src="imgtag.gif" alt="<img>" />
no es HTML válido y tampoco es XML válido.
No es XML válido porque '<' y '>' no son caracteres válidos dentro de las cadenas de atributos. Deben escapar utilizando las entidades XML correspondientes & lt; y & gt;
Tampoco es HTML válido porque el formulario de cierre corto no está permitido en HTML (pero es correcto en XML y XHTML). La etiqueta 'img' también es una etiqueta implícitamente cerrada según la especificación HTML 4.01. Esto significa que cerrarlo manualmente es realmente incorrecto y es equivalente a cerrar cualquier otra etiqueta dos veces.
La versión correcta en HTML es
<img src="imgtag.gif" alt="<img>">
y la versión correcta en XHTML y XML es
<img src="imgtag.gif" alt="<img>"/>
El siguiente ejemplo que diste también es inválido
<
tag
attr="5"
/>
Esto tampoco es HTML o XML válido. El nombre de la etiqueta debe estar justo detrás de '<', aunque los atributos y el cierre '>' pueden estar donde quieran. Entonces el XML válido es en realidad
<tag
attr="5"
/>
Y aquí hay otro más funky: en realidad puede elegir usar "o" como su carácter de cita de atributo
<img src="image.gif" alt='This is single quoted AND valid!'>
Todas las otras razones que se publicaron son correctas, pero el mayor problema al analizar HTML es que las personas generalmente no entienden todas las reglas de sintaxis correctamente. El hecho de que su navegador interprete su tagoup como HTML no significa que haya escrito HTML válido.
Editar: e incluso stackoverflow.com está de acuerdo conmigo con respecto a la definición de válido e inválido. Su XML / HTML no válido no está resaltado, mientras que mi versión corregida sí.
Básicamente, XML no está hecho para ser analizado con expresiones regulares. Pero tampoco hay razón para hacerlo. Hay muchos, muchos analizadores XML para cada idioma. Puede elegir entre analizadores SAX, analizadores DOM y analizadores Pull. Se garantiza que todo esto será mucho más rápido que el análisis con una expresión regular y luego puede usar tecnologías geniales como XPath o XSLT en el árbol DOM resultante.
Por lo tanto, mi respuesta es: no solo analizar XML con regexps es difícil, sino que también es una mala idea. Simplemente use uno de los millones de analizadores XML existentes y aproveche todas las características avanzadas de XML.
HTML es demasiado difícil incluso intentar analizarlo usted mismo. Primero, la sintaxis legal tiene muchas pequeñas sutilezas de las que quizás no estés al tanto, y segundo, HTML en la naturaleza es solo una enorme pila apestosa (me entiendes). Hay una variedad de bibliotecas de analizadores laxas que hacen un buen trabajo al manejar HTML como la sopa de etiquetas, solo utilícelas.