Regex mit und ohne und ohne mit :)



  • @wob
    Aaaah, OK. Mir ist erst jetzt das "$" in deinen Lookahead-Dingsen aufgefallen. Ich glaub dann hab ich's so ca. verstanden.
    Also das Lookahead Dings sagt entweder "ab hier muss was kommen was X matcht" bzw. bei negativem Lookahead halt "ab hier darf X auf keinen Fall matchen".

    Ist für mich aber immer noch schrecklich 🙂 Vor allem wenn man dann anfangen muss das Zeug auf Performance zu optimieren. Da schreib ich mir lieber meine Charakter-wusel-Schleife. Bei der weiss ich dann dass sie immer O(N) ist.



  • @hustbaer ja, hast du richtig verstanden. Es gibt außerdem noch die Look behinds, womit man gucken kann, ob etwas vor der aktuellen Position steht.
    Generell kann man Backtracking manchmal noch wegoptimieren, in Perl mit (>?...). Denn du hast recht, man kann auch leicht REs mit exponentiellem Zeitbedarf bauen, besonders mit Sternen....

    Und sowas wie countDigits(str) <= 4 ist leichter zu lesen.



  • @wob sagte in Regex mit und ohne und ohne mit 🙂:

    ^[A-Z](?=(\D*\d?){4}\D*$)(?=[^._-]*[._-]?[^._-]*$)[a-z0-9_.-]+$

    Ist Regex eigentlich offiziell Write-Only?
    Ich hoffe es. 🤒


  • Mod

    @Swordfish sagte in Regex mit und ohne und ohne mit 🙂:

    @wob sagte in Regex mit und ohne und ohne mit 🙂:

    ^[A-Z](?=(\D*\d?){4}\D*$)(?=[^._-]*[._-]?[^._-]*$)[a-z0-9_.-]+$

    Ist Regex eigentlich offiziell Write-Only?
    Ich hoffe es. 🤒

    Der Regex-Erklärer. Oder mit mehr Text statt Bildchen, aber ohne dass ich wüsste, wie man einen bestimmten Ausdruck verlinken kann: https://regexr.com/



  • @wob sagte in Regex mit und ohne und ohne mit 🙂:

    Und sowas wie countDigits(str) <= 4 ist leichter zu lesen.

    Das schreib ich ja sowieso, unabhängig davon wie countDigits implementiert ist (Regex-Impl oder Selbst-Geparsed)

    MfG SideWinder



  • BTW: Wer sich für regular expressions detaillierter interessiert, in den knapp 550 Seiten von https://www.amazon.de/Mastering-Regular-Expressions-Jeffrey-Friedl/dp/0596528124/ steigt man echt zum Profi auf und hat auch keine Probleme mehr performante Expressions zu kreieren, nicht nur weil viele gute Tipps drin sind, sondern weil man lernt wie der Implementierungs-Ansatz verschiedener Engines ist. Sehr spannendes Buch, kanns nur weiterempfehlen 🙂

    MfG SideWinder



  • @SideWinder sagte in Regex mit und ohne und ohne mit 🙂:

    und hat auch keine Probleme mehr performante Expressions zu kreieren

    Ähm. Ich würd jetzt mal vorsichtig behaupten dass das gar nicht immer möglich ist. Also wenn man es mit einer handgeschriebenen Lösung bzw. halt dem theoretischen Maximum (an Performance, nicht Laufzeit ;)) vergleicht.

    ps: Vor allem finde ich es immer schade wenn man eine Deskriptive Syntax verwendet und sich dann trotzdem Gedanken darüber machen muss wie die Engine es implementiert. Speziell wenn dann oft die einfachste Variante es zu schreiben die schlechteste ist. Andrerseits ist das bei SQL auch nicht viel anders, und SQL mag ich. Kommt halt auch immer darauf an wie gut man sich mit etwas auskennt und wie wohl man sich daher damit fühlt.


  • Mod

    Das wichtigste ist erst einmal, dass man nicht versehentlich etwas schreibt, dass dann beim Auswerten exponentiell explodiert. Das passiert schnell, wenn man sein Anfängerwissen naiv auf das erste verschachtelte Problem los lässt. Wenn man das zu vermeiden weiß, hat man schon einmal viel gewonnen.



  • @SeppJ
    Ernst gemeinte Frage, da ich mich mit Regexen kaum auskenne: kann man das so einfach vermeiden? Also ... was ich meine: kann man mit etwas Übung/Hintergrundwissen wirklich zuverlässig (und schnell) beurteilen dass die Laufzeit nicht explodiert?


  • Mod

    @hustbaer sagte in Regex mit und ohne und ohne mit 🙂:

    @SeppJ
    Ernst gemeinte Frage, da ich mich mit Regexen kaum auskenne: kann man das so einfach vermeiden? Also ... was ich meine: kann man mit etwas Übung/Hintergrundwissen wirklich zuverlässig (und schnell) beurteilen dass die Laufzeit nicht explodiert?

    Das müsstest du @SideWinder fragen. Ich weiß nur genug, um dir hinterher sagen zu können, warum etwas explodiert ist 🙂


Log in to reply