Tak właściwie
<img src="imgtag.gif" alt="<img>" />
nie jest poprawnym HTML-em i nie jest poprawnym XML-em.
To nie jest poprawny XML, ponieważ „<” i „>” nie są prawidłowymi znakami w ciągach atrybutów. Należy je zmienić za pomocą odpowiednich jednostek XML & lt; i>
Nie jest to również poprawny HTML, ponieważ krótki formularz zamykający nie jest dozwolony w HTML (ale jest poprawny w XML i XHTML). Znacznik „img” jest także znacznikiem niejawnie zamkniętym zgodnie ze specyfikacją HTML 4.01. Oznacza to, że ręczne zamknięcie jest w rzeczywistości nieprawidłowe i jest równoważne dwukrotnemu zamknięciu dowolnego innego znacznika.
Prawidłowa wersja w HTML to
<img src="imgtag.gif" alt="<img>">
a poprawna wersja w XHTML i XML to
<img src="imgtag.gif" alt="<img>"/>
Podany poniżej przykład jest również nieprawidłowy
<
tag
attr="5"
/>
To też nie jest poprawny HTML ani XML. Nazwa znacznika musi znajdować się tuż za „<”, chociaż atrybuty i zamykające „>” mogą znajdować się w dowolnym miejscu. Tak więc poprawny XML jest w rzeczywistości
<tag
attr="5"
/>
A oto jeszcze jedna zabawniejsza: możesz faktycznie użyć „lub” jako znaku cudzysłowu
<img src="image.gif" alt='This is single quoted AND valid!'>
Wszystkie pozostałe powody, które zostały opublikowane, są poprawne, ale największym problemem podczas analizowania HTML jest to, że ludzie zwykle nie rozumieją poprawnie wszystkich reguł składni. Fakt, że twoja przeglądarka interpretuje tagoupoup jako HTML, nie oznacza, że faktycznie napisałeś prawidłowy HTML.
Edycja: I nawet stackoverflow.com zgadza się ze mną w sprawie definicji ważnej i niepoprawnej. Twój nieprawidłowy XML / HTML nie jest podświetlony, a moja poprawiona wersja to.
Zasadniczo XML nie jest analizowany za pomocą wyrażeń regularnych. Ale nie ma też powodu, aby to robić. Istnieje wiele, wiele parserów XML dla każdego języka. Masz wybór między parserami SAX, parserami DOM i parserami Pull. Wszystkie te są gwarantowane znacznie szybciej niż parsowanie z wyrażeniem regularnym, a następnie możesz użyć fajnych technologii, takich jak XPath lub XSLT, w powstałym drzewie DOM.
Moja odpowiedź brzmi zatem: nie tylko trudno jest analizować XML z wyrażeniami regularnymi, ale jest to również zły pomysł. Wystarczy użyć jednego z milionów istniejących parserów XML i skorzystać ze wszystkich zaawansowanych funkcji XML.
HTML jest po prostu zbyt trudny, aby nawet samemu parsować. Po pierwsze, składnia prawna zawiera wiele drobnych subtelności, o których być może nie jesteś świadomy, a po drugie, HTML na wolności jest po prostu ogromną śmierdzącą stertą (dostajesz mój dryf). Istnieje wiele bibliotek parserów Lax, które dobrze sobie radzą z obsługą HTML, takich jak zupa tagów, wystarczy ich użyć.