В SO нет дня, который не проходит без вопросов о синтаксическом анализе (X) HTML или XML с запросом регулярных выражений.
Хотя относительно легко придумать примеры, демонстрирующие нежизнеспособность регулярных выражений для этой задачи или с набором выражений для представления концепции, я все еще не мог найти в SO формальное объяснение того, почему это невозможно сделать в непрофессиональном условия.
Единственные формальные объяснения, которые я смог найти на этом сайте, вероятно, чрезвычайно точны, но также весьма загадочны для программиста-самоучки:
недостаток здесь в том, что HTML - это грамматика Хомского типа 2 (контекстно-свободная грамматика), а RegEx - это грамматика Хомского типа 3 (регулярное выражение).
или:
Регулярные выражения могут соответствовать только регулярным языкам, но HTML - это контекстно-свободный язык.
или:
Конечный автомат (который является структурой данных, лежащей в основе регулярного выражения) не имеет памяти, кроме состояния, в котором он находится, и если у вас произвольно глубокая вложенность, вам понадобится произвольно большой автомат, который противоречит понятию конечного автомата.
или:
Лемма о накачке для обычных языков - причина, по которой вы не можете этого сделать.
[Честно говоря: большинство приведенных выше объяснений ссылаются на страницы википедии, но их не намного легче понять, чем сами ответы].
Итак, мой вопрос: не мог бы кто-нибудь предоставить перевод формальных объяснений, приведенных выше, почему невозможно использовать регулярное выражение для синтаксического анализа (X) HTML / XML?
РЕДАКТИРОВАТЬ: После прочтения первого ответа я подумал, что должен уточнить: я ищу «перевод», который также кратко объясняет концепции, которые он пытается перевести: в конце ответа читатель должен иметь приблизительное представление - например - что означают "регулярный язык" и "контекстно-свободная грамматика" ...