Warum ist es nicht möglich mit regex zu Parsen von HTML - /XML: eine formale Erklärung in einfachen Worten

Es gibt keinen Tag an SO, der vergeht, ohne eine Frage zu Parsen von (X)HTML-oder XML mit regulären Ausdrücken gefragt.

Es ist zwar relativ einfach zu kommen mit Beispiele, wie der nicht-Lebensfähigkeit von regexes für diese Aufgabe oder mit einem Sammlung von Ausdrücken repräsentieren das Konzept, konnte ich noch nicht finden, SO dass eine formale Erklärung, warum das nicht möglich ist, erfolgt in juristischer Hinsicht.

Nur formale Erklärungen, die ich finden konnte bisher auf dieser Website sind wahrscheinlich sehr genau, aber auch ziemlich kryptisch zu der Autodidakt Programmierer:

dem Fehler hier ist, dass HTML eine Chomsky Typ-2 Grammatik (Kontext-frei
Grammatik) und RegEx ist eine Chomsky-Typ-3 Grammatik (reguläre Ausdrücke)

oder:

Reguläre Ausdrücke können nur reguläre Sprachen, aber HTML ist eine
Kontext-freie Sprache.

oder:

Einer endlichen Automaten (die den Daten zugrunde liegenden Struktur eine regelmäßige
Ausdruck) nicht den Speicher neben dem Staat ist es in, und wenn
Sie haben beliebig tief verschachteln, müssen Sie eine beliebig große
Automat, das kollidiert mit der Vorstellung eines endlichen Automaten.

oder:

Dem Pumping lemma für reguläre Sprachen ist der Grund, warum Sie nicht tun können
.

[Um fair zu sein: die Mehrheit der oben genannten Erklärung link zu wikipedia-Seiten, aber diese sind auch nicht viel einfacher zu verstehen als die Antworten selbst].

Also meine Frage ist: könnte jemand bitte eine übersetzung in juristischer Hinsicht von den formellen Erklärungen, die oben gegeben werden, warum ist es nicht möglich mit regex zum Parsen von (X)HTML/XML?

EDIT: Nach dem Lesen der ersten Antwort dachte ich, ich sollte klarstellen: ich bin auf der Suche nach einer "übersetzung", die auch briefely erklärt die Begriffe, die es versucht zu übersetzen: am Ende einer Antwort, sollte der Leser eine grobe Idee - zum Beispiel - von dem, was "reguläre Sprache" und "kontextfreie Grammatik" bedeuten...

Sich der Tatsache bewusst sein, dass in der informatik Bedingungen, "reguläre Ausdrücke", unterscheiden sich stark von heutigen "regex-Implementierungen" (tools/api ' s verwenden Sie in einer Programmiersprache). Letzteres kann "erinnern" die Dinge, die Sie erlebt haben und können sogar übereinstimmen rekursiv definierten (sub -) Muster, machen Sie Spiel/analysieren/erkennen, viel mehr als das theoretische "reguläre Ausdrücke".
Das ist wirklich nur für Sprachen, die missbrauchen den Begriff "regulärer Ausdruck. POSIX-ERE-ist regelmäßig rein.
also, nennen Sie POSIX einer "modernen Umsetzung" :P. Im ernst aber: ja, du hast Recht, diejenigen, die wirklich regelmäßige. Ich habe gesagt "... viele der modernen regex-Implementierungen ..." oder "... PCRE-regex-Implementierungen ...".
Ich habe eine harte Zeit ernst zu nehmen Programmiersprachen, die grundsätzlich den Missbrauch rigorose Sprache für den Willen des marketing selbst, um unwissende Programmierer...
es ist bedauerlich, dass die PCRE-Implementierungen sind so genannte "reguläre Ausdrücke", aber nicht, dass man die Sprache ernst nimmt es einen Schritt zu weit, IMO. Ich meine, sind Sie nicht unter Perl, Java, Python, Ruby, JavaScript, .NET, etc. nicht ernst, denn von diesem?

InformationsquelleAutor mac | 2011-07-19

Schreibe einen Kommentar