Есть много вариантов использования, для которых регулярное выражение не будет работать должным образом. Например:
<p>foo<p>bar</p>baz</p>
<p>This paragraph is valid <!-- <p>This one isn't</p> --> </p>
Регулярное выражение, которое захватывает текст между <p>
и </p>
, будет захватывать (соответственно):
foo<p>bar
This paragraph is valid <!-- <p>This one isn't
Если бы мне пришлось обрабатывать HTML, найденный в дикой природе, я бы использовал MSHTML для анализа HTML, а затем выполнял поиск в DOM, чтобы найти объекты.
Использование MSHTML далеко не так просто, как использование регулярного выражения, чтобы быть уверенным. Но MSHTML разработан, чтобы разобраться в самых небрежных веб-страницах. Я бы предпочел использовать все знания о беспорядочных реальных сценариях использования, для которых он предназначен, а не открывать их для себя.
См. Ответ на этот вопрос для небольшого количества примера кода.