Ich🐮🤓iel
Ich🐮🤓iel
kommt auf deine strings an und was du mit denen machen willst.
query parameter aus ner url raussuchen? gute wahl.
strukturiertes komplexes zeug wie xml oder json? nimm n speziellen parser, ausser dich interessiert nur ob irgend ein muster darin vorkommt und willst sonst nix machen.
du brauchst n rekursives muster? ekelig, voll ekelig. kann irgendwer machen den ich nicht mag oder wir machen das nicht mit nem regulären ausdruck. pfui daibel.
query parameter aus ner url raussuchen? gute wahl.
War genau das wofür ich es jetzt gebraucht habe. Das ist wirklich enorm angenehm. Was auch gut geht ist, wenn man Nutzer Eingaben parsen will.
du brauchst n rekursives muster? […] kann irgendwer machen
Mein IT-Studium hat gerade meinen Körper verlassen.
Regexe sind zwar für die meisten schnell-und-dreckig Anwendungsfälle phänomenal nützlich aber insgesamt gesehen immer nich sehr eingeschränkt, was die parsebaren Sprachen angeht.
Ob härtere Geschütze aufgefahren werden müssen, merkt man meist, wenn das mit den Regexen absolut schmerzhaft wird oder gar nicht mehr so recht klappen will (versuch z.B. mal, einen Regex zu schreiben, der Worte der Form 0…01…1 erkennt, wobei die Anzahl der 0er und 1er gleich ist; diese Sprache ist nämlich nicht regulär und ohne Regex-Erweiterungen gar nicht über Regexe erkennbar). Eine solche Eskalationsstufe stellen PEGs dar. Falls das nix bringt kann man immer noch mit lex und yacc sich nen eigenen parser generieren lassen aber in die Situation kommt man eher selten.
In diesem Sinne viel Spaß mit regulären Ausrücken, mögen sie dir bei den nächsten Codierherausforderungen das Leben vereinfachen!
Regex ist ja nicht die einzige Syntax zum Pattern Matching.
Jetzt muss ich mal meine mangelnde Bildung offenbaren: welche Alternativen gäbe es da?
Also wenn man konkret auf Dateipfade matchen will, dann sind Glob-Patterns das Mittel der Wahl. Sieht dann so aus: /home/fr*/Downloads/
Der Stern ist dann eben ein Wildcard, so dass du damit z.B. die Downloads-Verzeichnisse der Benutzer franz und fridolin löschen könntest.
Sonst kenne ich persönlich eigentlich nur immer so Einzelphänomene, also wo’s dann für eine Programmiersprache eine Bibliothek gibt, womit man dann ein Pattern z.B. mittels einer Builder-API zusammensetzen kann.
Die können dann oft auch zu einem Regex übersetzt werden, so dass man sie in bestehende APIs reinwerfen kann, die eben ein Regex erwarten.
Keine Ahnung, persönlich finde nicht, dass man sich dadurch das Erlernen von Regex sparen kann…
Parser Combinators, beispielsweise: docs.rs/nom/latest/nom/
In der stdlib von Haskell gibt es im Vergleich zu den meisten anderen keine Regex Implementation, in der Sprache ist es üblich stattdessen mit Parser Combinators zu arbeiten.
Naja, Regex ist ja erstmal nur die Syntax zur Beschreibung eines Textes. Das muss ja dann ein Parser noch interpretieren und damit etwas machen.
Bei so einem Parser Combinator purzelt ja direkt ein Parser-Programm heraus, wenn ich das richtig verstehe. Also ja, da gibt es auch eine gewisse Syntax, die auch die Struktur des zu parsenden Textes irgendwo widerspiegelt, aber es ist nicht nur eine Beschreibung des Textes, sondern formuliert direkt die Parser-Logik.
Also ja, wenn man sowieso ein Programm schreibt, macht es wahrscheinlich keinen großen Unterschied. Aber gibt es ja schon auch oft, dass man ein bestehendes Programm hat und da nur noch ein Regex mitgeben kann, um das Verhalten zu konfigurieren…
Naja, Regex ist ja erstmal nur die Syntax zur Beschreibung eines Textes. Das muss ja dann ein Parser noch interpretieren und damit etwas machen.
Ich verstehe was du meinst. Falls die Implementation die Regex direkt zu einem Parser kompiliert und in einer VM ausführt, ist sie quasi selber der Parser bzw der Quellcode dafür. Aber ich verstehe deine Sicht, ich sage nicht dass du falsch liegst.
Bei so einem Parser Combinator purzelt ja direkt ein Parser-Programm heraus, wenn ich das richtig verstehe.
Nein, das wäre der Fall bei yacc & co, wo man eine Grammatik schreibt und ein Parser generiert wird. nom ist vielmehr eine Bibliothek, mit welcher man von Hand eigene Parser implementiert. Sie besteht aus ganz einfachen, ganz generalisierten Komponenten, die man kombiniert - deswegen der Name Parser Combinator Library.
aber es ist nicht nur eine Beschreibung des Textes, sondern formuliert direkt die Parser-Logik.
Es gibt viele direkte Equivalenzen. Es gibt Kombinatoren für “eine oder mehrere Leerschläge” und “exakt ein Kleinbuchstabe” und “optional eine Ziffer” und so weiter - das ist genau dasselbe, was man in Regex auch ausdrückt. Ich würde sagen, nom ist ein Superset von Regex.
\\\\