Réellement
<img src="imgtag.gif" alt="<img>" />
n'est pas du HTML valide et n'est pas du XML non plus valide.
Ce n'est pas du XML valide car les «<» et «>» ne sont pas des caractères valides dans les chaînes d'attributs. Ils doivent être échappés à l'aide des entités XML correspondantes & lt; et & gt;
Ce n'est pas non plus du HTML valide car le court formulaire de fermeture n'est pas autorisé en HTML (mais est correct en XML et XHTML). La balise «img» est également une balise implicitement fermée selon la spécification HTML 4.01. Cela signifie que sa fermeture manuelle est en fait incorrecte et équivaut à la fermeture de toute autre balise deux fois.
La bonne version en HTML est
<img src="imgtag.gif" alt="<img>">
et la version correcte en XHTML et XML est
<img src="imgtag.gif" alt="<img>"/>
L'exemple suivant que vous avez donné est également invalide
<
tag
attr="5"
/>
Ce n'est pas non plus du HTML ou du XML valide. Le nom de la balise doit être juste derrière le '<', bien que les attributs et la fermeture '>' puissent être où ils veulent. Donc, le XML valide est en fait
<tag
attr="5"
/>
Et voici une autre plus amusante: vous pouvez réellement choisir d'utiliser "ou 'comme caractère de citation de votre attribut
<img src="image.gif" alt='This is single quoted AND valid!'>
Toutes les autres raisons qui ont été publiées sont correctes, mais le plus gros problème avec l'analyse HTML est que les gens ne comprennent généralement pas correctement toutes les règles de syntaxe. Le fait que votre navigateur interprète votre groupe de balises comme HTML ne signifie pas que vous avez réellement écrit du HTML valide.
Edit: Et même stackoverflow.com est d'accord avec moi concernant la définition de valide et invalide. Votre XML / HTML invalide n'est pas mis en évidence, tandis que ma version corrigée l'est.
Fondamentalement, XML n'est pas conçu pour être analysé avec des expressions rationnelles. Mais il n'y a également aucune raison de le faire. Il existe de nombreux analyseurs XML pour chaque langue. Vous avez le choix entre les analyseurs SAX, les analyseurs DOM et les analyseurs Pull. Tous ces éléments sont garantis beaucoup plus rapides que l'analyse avec une expression rationnelle et vous pouvez ensuite utiliser des technologies intéressantes comme XPath ou XSLT sur l'arborescence DOM résultante.
Ma réponse est donc: non seulement l'analyse de XML avec des expressions régulières est difficile, mais c'est aussi une mauvaise idée. Utilisez simplement l'un des millions d'analyseurs XML existants et profitez de toutes les fonctionnalités avancées de XML.
Le HTML est tout simplement trop difficile pour même essayer d'analyser par vous-même. Premièrement, la syntaxe légale a de nombreuses petites subtilités que vous ne connaissez peut-être pas, et deuxièmement, le HTML à l'état sauvage n'est qu'une énorme pile puante (vous obtenez ma dérive). Il existe une variété de bibliothèques d'analyseurs laxistes qui font un bon travail pour gérer le HTML comme la soupe de balises, utilisez-les simplement.