Sebenarnya
<img src="imgtag.gif" alt="<img>" />
juga bukan HTML yang valid, dan juga bukan XML yang valid.
Ini bukan XML yang valid karena '<' dan '>' bukan karakter yang valid di dalam string atribut. Mereka harus melarikan diri menggunakan entitas XML yang sesuai & lt; dan & gt;
Itu juga bukan HTML yang valid karena formulir penutupan pendek tidak diperbolehkan dalam HTML (tetapi benar dalam XML dan XHTML). Tag 'img' juga merupakan tag tertutup secara implisit sesuai dengan spesifikasi HTML 4.01. Ini berarti bahwa menutupnya secara manual sebenarnya salah, dan setara dengan menutup tag lain dua kali.
Versi yang benar dalam HTML adalah
<img src="imgtag.gif" alt="<img>">
dan versi yang benar dalam XHTML dan XML adalah
<img src="imgtag.gif" alt="<img>"/>
Contoh berikut yang Anda berikan juga tidak valid
<
tag
attr="5"
/>
Ini juga bukan HTML atau XML yang valid. Nama tag harus tepat di belakang '<', meskipun atribut dan penutupan '>' ada di mana pun mereka inginkan. Jadi XML yang valid sebenarnya
<tag
attr="5"
/>
Dan inilah satu lagi yang lebih lucu: Anda sebenarnya dapat memilih untuk menggunakan "atau 'sebagai karakter kutipan atribut Anda
<img src="image.gif" alt='This is single quoted AND valid!'>
Semua alasan lain yang diposting sudah benar, tetapi masalah terbesar dengan parsing HTML adalah bahwa orang biasanya tidak memahami semua aturan sintaks dengan benar. Fakta bahwa browser Anda mengartikan tagoup Anda sebagai HTML tidak berarti bahwa Anda telah benar-benar menulis HTML yang valid.
Sunting: Dan bahkan stackoverflow.com setuju dengan saya mengenai definisi yang valid dan tidak valid. XML / HTML Anda yang tidak valid tidak disorot, sedangkan versi saya yang diperbaiki adalah.
Pada dasarnya, XML tidak dibuat untuk diuraikan dengan regexps. Tetapi tidak ada alasan untuk melakukannya. Ada banyak, banyak parser XML untuk masing-masing dan setiap bahasa. Anda memiliki pilihan antara parser SAX, parser DOM dan parser Tarik. Semua ini dijamin jauh lebih cepat daripada parsing dengan regexp dan Anda kemudian dapat menggunakan teknologi keren seperti XPath atau XSLT pada pohon DOM yang dihasilkan.
Karenanya, jawaban saya adalah: tidak hanya mem-parsing XML dengan regexps sulit, tetapi juga merupakan ide yang buruk. Cukup gunakan salah satu dari jutaan parser XML yang ada, dan manfaatkan semua fitur canggih XML.
HTML terlalu sulit bahkan untuk mencoba parsing sendiri. Pertama, sintaksis hukum memiliki banyak seluk-beluk kecil yang mungkin tidak Anda sadari, dan kedua, HTML di alam liar hanyalah tumpukan besar yang berbau busuk (Anda mengerti maksud saya). Ada berbagai pustaka lax parser yang melakukan pekerjaan dengan baik dalam menangani HTML seperti sup tag, cukup gunakan ini.