Es gibt keinen Tag auf SO, an dem keine Frage zum Parsen von (X) HTML oder XML mit regulären Ausdrücken gestellt wird.
Obwohl es relativ einfach ist, Beispiele zu finden, die die Nichtdurchführbarkeit von Regexen für diese Aufgabe oder eine Sammlung von Ausdrücken zur Darstellung des Konzepts demonstrieren , konnte ich auf SO immer noch keine formale Erklärung dafür finden, warum dies bei Laien nicht möglich ist Begriffe.
Die einzigen formalen Erklärungen, die ich bisher auf dieser Site finden konnte, sind wahrscheinlich äußerst genau, aber für den autodidaktischen Programmierer auch ziemlich kryptisch:
Der Fehler hierbei ist, dass HTML eine Chomsky-Typ-2-Grammatik (kontextfreie Grammatik) und RegEx eine Chomsky-Typ-3-Grammatik (regulärer Ausdruck) ist.
oder:
Reguläre Ausdrücke können nur mit regulären Sprachen übereinstimmen, HTML ist jedoch eine kontextfreie Sprache.
oder:
Ein endlicher Automat (die Datenstruktur, die einem regulären Ausdruck zugrunde liegt) hat außer dem Zustand, in dem er sich befindet, keinen Speicher. Wenn Sie eine beliebig tiefe Verschachtelung haben, benötigen Sie einen beliebig großen Automaten, der mit der Vorstellung eines endlichen Automaten kollidiert.
oder:
Das Pumping-Lemma für reguläre Sprachen ist der Grund, warum Sie das nicht können.
[Um fair zu sein: Der Großteil der obigen Erklärung verweist auf Wikipedia-Seiten, aber diese sind nicht viel einfacher zu verstehen als die Antworten selbst].
Meine Frage lautet also: Könnte jemand bitte eine Übersetzung der oben gegebenen formalen Erklärungen in Laienbegriffe liefern, warum es nicht möglich ist, Regex zum Parsen von (X) HTML / XML zu verwenden?
EDIT: Nachdem ich die erste Antwort gelesen hatte, dachte ich, ich sollte klarstellen: Ich suche eine "Übersetzung", die auch kurz die Konzepte erklärt, die sie zu übersetzen versucht: Am Ende einer Antwort sollte der Leser eine grobe Idee haben - zum Beispiel - was "reguläre Sprache" und "kontextfreie Grammatik" bedeuten ...