По моему мнению, попытка парсинга HTML с чем-то, кроме парсера HTML, просто требует мира боли. HTML является действительно сложным языком (что является одной из основных причин создания XHTML, что гораздо проще, чем HTML).
Например, это:
<HTML /
<HEAD /
<TITLE / > /
<P / >
является полным, на 100% правильно сформированным, на 100% действительным HTML-документом. (Ну, в нем отсутствует объявление DOCTYPE, но кроме этого ...)
Это семантически эквивалентно
<html>
<head>
<title>
>
</title>
</head>
<body>
<p>
>
</p>
</body>
</html>
Но, тем не менее, это правильный HTML, с которым вам придется иметь дело. Вы, конечно, могли бы разработать регулярное выражение для его синтаксического анализа, но, как уже предлагали другие, использовать настоящий анализатор HTML просто ооочень просто.