En esos casos que comentas existen otras alternativas para mejorar el código html:
tidy, consultas xpath, ignorar los errores etc. Las expresiones regulares no son la mejor opción para parsear html, puedes perder muchisimo tiempo afinando una expresión regular que puede fallar con cualquier cambio en el HTML. No se hicieron para esto y no tendrás las ventajas de DOM.
¿para qué reinventar la rueda?
Saludos.