Я не знаю, что этот стиль - «нормальный» способ делать вещи.Это лучше, чем большинство из тех, что я видел, но все же слишком близко к тому, что я называю «наивным» подходом в этом ответе .С одной стороны, это не учитывает комментарии HTML, мешающие вещам.Есть также юридические, но в некотором роде вопросы, с которыми он не связан.Но это HTML-комментарии, в которых большинство таких подходов рушатся.
Более естественный способ - использовать лексер для отделения токенов, как показано в примере в скрипте этого ответа , а затем собрать их осмысленно,Лексер мог бы достаточно легко узнать о комментариях HTML.
Вы могли бы подойти к этому с полной грамматикой, такой как приведенная здесь для анализаRFC 5322 почтовый адрес.Именно такой подход я использую во втором, «волшебном» решении в этом ответе .Но даже это всего лишь полная грамматика для правильно сформированного HTML, и меня интересуют только несколько разного рода тегов.Те, которые я определяю полностью, но я не определяю допустимые поля для тегов, которые меня не касаются.