Насправді
<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 полягає в тому, що люди зазвичай не розуміють усіх правил синтаксису правильно. Те, що ваш браузер інтерпретує ваш теги як HTML, не означає, що ви написали дійсний HTML.
Редагувати: І навіть stackoverflow.com погоджується зі мною щодо визначення дійсного та недійсного. Ваш недійсний XML / HTML не виділяється, в той час як моя виправлена версія є.
В основному, XML не робиться для розбору з регулярними виразами. Але для цього також немає підстав. Є багато, багато XML-аналізаторів для кожної мови. Ви можете вибрати між SAX-парсерами, DOM-парсерами та Pull-парсерами. Все це гарантується набагато швидше, ніж розбір з регулярним виразом, і ви можете потім використовувати круті технології, такі як XPath або XSLT на отриманому дереві DOM.
Отже, моя відповідь: не тільки важкий аналіз XML за допомогою regexps, але це також погана ідея. Просто скористайтеся одним з мільйонів існуючих парсерів XML і скористайтеся всіма розширеними функціями XML.
HTML занадто важкий, щоб навіть спробувати самостійно розібратися. По-перше, юридичний синтаксис має багато невеликих тонкощів, про які ви можете не знати, а по-друге, HTML в дикій природі - це просто величезна смердюча купа (ви отримуєте мій дрейф). Існує різноманітна бібліотека розслабленого розбору, яка добре справляється з обробкою HTML, як суп із тегами, просто використовуйте їх.