Das ist echt gar nicht so schwer wie ich immer dachte. Werde das glaube zum üben jetzt häufiger nutzen.

  • rumschlumpel@feddit.org
    link
    fedilink
    arrow-up
    7
    ·
    edit-2
    7 days ago

    Ich habe mich damit schon öfters beschäftigt. Die grundsätzliche Funktionsweise macht schon Sinn, aber die Syntax wirklich zu verstehen und es sich dann auch noch zu merken finde ich sehr schwierig - jedes Mal, wenn ich es brauche, krebse ich wieder rum. Entsprechend benutze ich wenn möglich was anderes, Regex ist ja nicht die einzige Syntax zum Pattern Matching.

    • Kornblumenratte@feddit.org
      link
      fedilink
      arrow-up
      4
      ·
      7 days ago

      Regex ist ja nicht die einzige Syntax zum Pattern Matching.

      Jetzt muss ich mal meine mangelnde Bildung offenbaren: welche Alternativen gäbe es da?

        • Ephera@lemmy.ml
          link
          fedilink
          Deutsch
          arrow-up
          2
          ·
          7 days ago

          Puh, hatte nicht erwartet, dass du das mit “Syntax zum Pattern Matching” meinst. Das ist ja schon ein vollwertiger Parser. 😅

          • jenesaisquoi@feddit.org
            link
            fedilink
            English
            arrow-up
            1
            ·
            6 days ago

            So halb. Man kann damit Parser bauen. Andererseits - was ist eine Regex wenn nicht ein kleiner Parser?

            • Ephera@lemmy.ml
              link
              fedilink
              Deutsch
              arrow-up
              2
              ·
              6 days ago

              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…

              • jenesaisquoi@feddit.org
                link
                fedilink
                English
                arrow-up
                2
                ·
                6 days ago

                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.

      • Ephera@lemmy.ml
        link
        fedilink
        Deutsch
        arrow-up
        2
        ·
        edit-2
        6 days ago

        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 ich nicht, dass man sich dadurch das Erlernen von Regex sparen kann…

    • optional@feddit.org
      link
      fedilink
      arrow-up
      2
      ·
      6 days ago

      Nicht zu vergessen, die drölfzig verschiedenen Dialekte, und der Fakt dass das Werkzeug das Du gerade nutzen willst leider genau diese eine Funktion nicht unterstützt oder hinter einem neuen obskuren Sonderzeichen versteckt, dass es nicht auf Deiner Tastatur gibt.