Bei meiner Arbeit habe ich nur wenige Male reguläre Ausdrücke verwenden müssen. In diesen wenigen Fällen habe ich jedoch eine sehr leistungsfähige Ausdrucksform entdeckt, mit der ich einige äußerst nützliche Dinge tun kann.
Das Problem ist, dass die für reguläre Ausdrücke verwendete Sprache falsch ist - Punkt.
Aus psychologischer Sicht ist dies falsch - die Verwendung von körperlosen Symbolen ist nur für Menschen mit einem eidetischen Gedächtnis eine nützliche Referenz. Die syntaktischen Regeln sind zwar klar umrissen, aber nach meiner Erfahrung und dem, was ich von anderen gelernt habe, kann sich die Entwicklung eines erfolgreich funktionierenden regulären Ausdrucks in allen außer den trivialsten Situationen als schwierig erweisen. Dies ist verständlich, da es sich um ein symbolisches Analogon zur Mengenlehre handelt, die eine ziemlich komplizierte Sache ist.
Es kann sich als schwierig erweisen, den Ausdruck, an dem Sie arbeiten, in seine einzelnen Teile aufzulösen. Aufgrund der Beschaffenheit der Sprache ist es möglich, einen regulären Ausdruck auf mehrere Arten zu lesen, wenn man sein primäres Ziel nicht versteht, so dass die Interpretation der Regexes anderer Leute kompliziert ist. In der Lehre von der natürlichen Sprache wird dies als Pragmatik bezeichnet.
Die Frage, die ich stellen möchte, lautet also: Gibt es so etwas wie einen Compiler für reguläre Ausdrücke? Oder kann man überhaupt einen bauen?
Man könnte Regexe, metaphorisch gesehen, als Assembler betrachten - es gibt einige Ähnlichkeiten. Könnte man einen Compiler entwickeln, der eine natürlichere Sprache - eine höhere Sprache - in reguläre Ausdrücke umwandelt? Dann könnte ich in meinem Code meine Regexe unter Verwendung der höheren Sprache in einer Header-Datei definieren und sie bei Bedarf durch eine symbolische Referenz referenzieren. Ich und andere könnten von meinem Code aus auf die Header-Datei verweisen und leichter verstehen, was ich mit meinen Regexes erreichen will.
Ich weiß, dass es von einem logischen Standpunkt aus möglich ist, sonst wären Computer nicht möglich, aber wenn Sie bis hierher gelesen haben, würden Sie dann in Erwägung ziehen, die Zeit zu investieren, um es zu realisieren?
4 Stimmen
Ich finde reguläre Ausdrücke recht einfach zu lesen.
1 Stimmen
Ich denke, die Mehrdeutigkeit einer natürlichen Sprache könnte die Komplikationen eher vergrößern als verringern. Regex scheint anfangs entmutigend zu sein, besonders Dinge wie Backtracking und nicht gierige Operatoren. Nachdem ich kürzlich Regex neu erlernt habe, habe ich einen Abend lang intensiv gelernt, um das meiste zu verstehen. Ich bin mir jedoch sicher, dass jemand mit mehr Erfahrung mich bei Regex leicht übertreffen kann. Wie bei allem, was man wissen sollte, kommt es auf Übung und Ausdauer an.
0 Stimmen
Die Antwort von Andrea Ambu ist eine große Hilfe für alle, die Probleme mit Regex haben. Das ist in etwa das, was ich meinte, aber ich hatte wirklich gehofft, dass es eine Bibliothek mit Makros oder Ähnlichem für verschiedene Programmiersprachen gibt, mit der man eine Textsuche mit einer kombinatorischen Syntax usw. definieren kann. Die Menschen haben unterschiedliche mentale Modelle, und einige Programmierer, mich selbst eingeschlossen, finden es praktisch unmöglich, mit Regex zu arbeiten, obwohl es Drittanbieter gibt, die sie für wenig Geld schreiben. Wenn man regelmäßig damit arbeitet, ist es einfacher, aber wenn es sich nur um ein gelegentliches Projekt handelt, ist es schwierig.
0 Stimmen
Sie können natürlich einen Regex-Compiler erstellen. Die Sache ist nur, dass das sehr viel Zeit und Mühe kosten wird. Es ist sehr harte Arbeit und bedenken Sie alle Optimierungen, die die aktuellen Sprachen für Sie implementiert haben, die Sie in diesem Fall herausfinden müssen :) Ich erzähle Ihnen das, weil ich gerade einen Regex-Compiler schreibe. Ich mache es zum Spaß und um Compiler, Parsing und NFAs zu lernen, aber es ist nicht einfach!