2010-02-19 7 views
11

Ich frage mich, warum es so viele Dialekte mit regulärem Ausdruck geben muss. Warum scheint es so viele Sprachen zu sein, anstatt einen erprobten Dialekt wiederzuverwenden, scheinen sie darauf aus zu sein, ihr eigenes zu schreiben.Warum gibt es so viele verschiedene Dialekte mit regulärem Ausdruck?

Like these.

Ich meine, ich verstehe, dass einige von ihnen haben sehr verschiedene Backends. Aber sollte das nicht vom Programmierer abstrahiert werden?

Ich beziehe mich mehr auf die ungeraden, aber kleinen Unterschiede, wie zum Beispiel, wo Klammern in einer Sprache maskiert werden müssen, aber Literale in einer anderen Sprache sind. Oder wo Meta-Zeichen etwas anderes bedeuten.

Gibt es einen bestimmten Grund, warum wir keinen universellen Dialekt für reguläre Ausdrücke haben können? Ich denke, das würde es Programmierern, die in mehreren Sprachen arbeiten müssen, sehr erleichtern.

+0

Ich weiß nicht, vielleicht die Entwickler von jedem Dialekt dachten, dass ihre besser war als alle anderen, oder vielleicht passte es zu einem bestimmten Bedarf zu der Zeit, die andere noch nicht unterstützt, und dann als andere beschlossen, diese Funktionen zu implementieren, die sie dachten Sie könnten es besser machen. Es ist nicht so, als gäbe es ein Zentrales Regex-Präsidium. – FrustratedWithFormsDesigner

+2

Wäre das nicht, was Posix sein soll :-)? – BigBeagle

+0

http://StackOverflow.com/a/11857890/874188 hat ein wenig historischen Hintergrund, wenn Sie das suchen. – tripleee

Antwort

9

Da nur reguläre Ausdrücke drei Operationen haben:

  • Verkettungs
  • Union |
  • Kleene Verschluss *

Alles andere ist eine Erweiterung oder syntaktischen Zucker, und hat so keine Quelle für die Standardisierung. Dinge wie das Einfangen von Gruppen, Rückreferenzen, Zeichenklassen, Kardinalitätsoperationen usw. sind alle Zusätze zur ursprünglichen Definition von regulären Ausdrücken.

Einige dieser Erweiterungen machen "reguläre Ausdrücke" überhaupt nicht mehr regelmäßig. Sie sind aufgrund dieser Extras in der Lage, nicht-reguläre Sprachen zu wählen, aber wir nennen sie trotzdem reguläre Ausdrücke.

Wenn Benutzer weitere Erweiterungen hinzufügen, versuchen sie häufig, andere, häufig verwendete Varianten regulärer Ausdrücke zu verwenden. Deshalb verwendet fast jeder Dialekt X+, um "ein oder mehrere Xs" zu bedeuten, was selbst nur eine Abkürzung für das Schreiben XX* ist.

Aber wenn neue Funktionen hinzugefügt werden, gibt es keine Basis für die Standardisierung, also muss jemand etwas ausdenken. Wenn mehr als eine Gruppe von Designern ungefähr zur selben Zeit ähnliche Ideen entwickelt, werden sie unterschiedliche Dialekte haben.

3

Aus dem gleichen Grund haben wir so viele Sprachen. Einige Leute werden versuchen, ihre Werkzeuge zu verbessern, und gleichzeitig werden andere gegen Veränderungen resistent sein. C/C++/Java/C# irgendjemand?

1

Das "Ich habe es besser gemacht" -Syndrom der Programmierung produziert all diese Dinge. Dasselbe gilt für Standards. Die Leute versuchen, den nächsten "besten" Standard zu schaffen, um alle anderen zu ersetzen, und es wird einfach etwas anderes, für das wir alle lernen müssen.

1

Ich denke, ein guter Teil davon ist die Frage, wer für die Einstellung und Aufrechterhaltung der Standardsyntax verantwortlich ist und die Kompatibilität in verschiedenen Umgebungen gewährleistet.

Wenn ein Regex selbst in einem Interpreter/Compiler mit seinen eigenen Regeln für die String-Manipulation geparst werden muss, kann dies dazu führen, dass die Dinge in Bezug auf Escapezeichen und Literale anders gehandhabt werden müssen.

Eine gute Strategie besteht darin, sich Zeit zu nehmen, um zu verstehen, wie Regex-Algorithmen selbst auf einer abstrakteren Ebene funktionieren. Dann wird die Implementierung einer bestimmten Syntax viel einfacher. Ähnlich wie jede Programmiersprache eine eigene Syntax für Konstrukte wie bedingte Anweisungen und Schleifen hat, aber immer noch dieselbe abstrakte Aufgabe ausführt.

Verwandte Themen