Ze składnią HTML-a jest taki problem, że ona niekoniecznie jest regularna i same komentarze można zapisywać na wiele różnych sposobów:
<!-- -->
<!-- --!>
<!- ->
<!- !->
Wszystkie te sposoby są interpretowane przez przeglądarkę jako komentarze, mimo że część z nich jest w teorii niepoprawna składniowo (a to dlatego, że specyfikacja HTML przy opisie parsera ma też cały algorytm do obsługi błędów i tego typu rzeczy są dokładnie rozpisane).
Tak samo zresztą przy zapisie elementów:
<LiNk
hreF
=
https://www.comandeer.pl
rEl= " canonical"
/>
To wciąż poprawny element link, ale tak na oko Twój syntax go nie sparsuje, bo nie bierzesz pod uwagę choćby odstępów między nazwą a wartością atrybutu.
IMO najsensowniejszy sposób na parsowanie HTML-a to wykorzystanie parsera, względnie napisanie własnego, uproszczonego, na podstawie dokładnego algorytmu w specyfikacji. Niemniej, jeśli nie chcesz rezygnować z istniejącego rozwiązania na wyrażeniach regularnych, to dodałbym do składni zanegowanie wyrażenia regularnego. Albo, IMO jeszcze lepiej, zanegowanie innego fragmentu składni:
znacznik komentarza
"<!--"
!zakonczenie komentarza
zakonczenie komentarza
zakonczenie komentarza
"-->" | "inne wersje"
Zastanawia mnie też, po co Ci wgl parsowanie tych elementów HTML w serwerze HTTP? Zgaduję, że jest to związane z obsługą HTTP/2 pusha. Jeśli tak, to… IMO nie ma sensu w to za bardzo inwestować, bo HTTP/2 push jest przeznaczony do ubicia. Tym bardziej, że w HTTP/3 działa zupełnie inaczej. Ten z HTTP/2 ma sporo problemów, m.in. nie istnieje sensowny mechanizm kontrolowania, czy dany zasób już pushowaliśmy. A to oznacza, że będziemy marnować transfer albo implementować wymyślne mechanizmy, które będą to dla nas sprawdzać.
Ciekawi mnie też fragment sprawdzający, czy plik zaczyna się od DOCTYPE lub html. Jeśli ma to służyć wykryciu plików HTML, to IMO bym z tym uważał, bo mogą zdarzać się dokumenty HTML niezaczynające się ani od jednego, ani od drugiego. Tak, będą niepoprawne składniowo, ale przeglądarki wciąż je odczytają. Sam znacznik html jest opcjonalny, a brak DOCTYPE powoduje jedynie włączenie trybu quirks. Jedynym sensownym sposobem wykrywania dokumentów HTML jest sprawdzanie ich typu MIME.