[PHP] Online Reverse RegEx String Generator - Beta-Tester gesucht

    • Beta
    • Closed Source

    Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Link.

      [PHP] Online Reverse RegEx String Generator - Beta-Tester gesucht

      Hi zusammen,

      ich habe in letzter Zeit an einer Klasse programmiert mit der man aus einem RegEx pattern entsprechend Strings generieren kann.

      Beispiel:
      [A-F0-9]{5} generiert sowas wie "9BF4B" oder "EC79E".
      Hello (World|Universe) macht "Hello World" oder "Hello Universe".
      .{10} erzeugt "#g7:T@!3k$" oder "Jx+&(9_3h?"

      Was geht:
      - Meta-characters (\w, \W, \d, \D, \s, \S
      - Backreferences \g<num> (Backreference, neu generiert) und \<num> (Backreference, gleiches Ergebnis wie Group))
      - Character class, also [abc] oder [A-Fx-z2-7]
      - Umgekehrte (negierte) Character class, also [^\s] (alles außer whitespaces)
      - Gruppen (A|B|C) (auch verschachtelt)
      - Quantifier ?, *, +, {3}, {2,6}, {,4}, {3,} (bei Unendlich-Quantifiern wird auf max. 100 limitiert bzw. der Min-Wert plus 100)
      - Sequenzen escapen, d.h. \( oder \] etc..

      Ist auch recht performant, der Pattern ([0-9A-F]{2}:){5}([0-9A-F]{2})|([0-9A-F]{2}-){5}([0-9A-F]{2}) (erzeugt eine MAC Adresse) benötigt wenn man ihn 1.000x generiert insgesamt gerade mal ~0.035923... Sekunden.

      Hier ein Screenshot:



      Ich werde demnächst den PHP-Source bereitstellen, wollte das Tool aber vorher auch von anderen ein wenig durchtesten lassen.
      Würde mich freuen wenn sich ein paar finden die da ein wenig Zeit investieren und Mal allerlei Pattern eintippen um zu schauen ob alles soweit funktioniert - das ganze kann Online im Browser getestet werden, hier muss also nix runtergeladen werden oder so.

      Zum testen: regex.marius-gerum.de/


      Link :thumbup:

      *Topic verschoben*


      www.marius-gerum.de
      PHP lernen | Programmierung | Sonstiger Krempel
      Zum Blog | PHP lernen | GitHub | Gists | List of awesome

      Dieser Beitrag wurde bereits 11 mal editiert, zuletzt von „Link“ ()

      Coole Sache, hab mal ein paar Pattern getestet und abgesehen von einem*, immer das zurück bekommen was ich erwartet habe.
      Ich bin von der Geschwindigkeit echt beeindruckt und warte gespannt auf den Quellcode.

      * Bei dem problematischen Pattern dreht es sich um "Named groups": (?<x>abc){3}
      Wobei das ein etwas schwierigeres Thema ist, da das unterschiedlich implementiert wurde.
      Danke für dein Feedback :)

      Ja, named groups sind dort noch nicht implementiert, das ist das woran ich gestern Abend noch angefangen hab zu arbeiten :) Backreferences sollen dann über \{Name} bzw \g{Name} möglich sein.
      Gibt ein paar Features die man vermutlich weg lassen kann, ich denke lookarounds und \b ist für den Generator nicht nützlich.

      Link


      www.marius-gerum.de
      PHP lernen | Programmierung | Sonstiger Krempel
      Zum Blog | PHP lernen | GitHub | Gists | List of awesome

      Heyho,

      geile Performance ich dachte das würde länger brauchen.
      Habe selber ein paar Pattern eingetippt und nur das was ich auch haben wollte zurück bekommen.

      Das gefällt mir echt sehr gut, da bin ich sehr auf den Quellcode gespannt wie das ganze genau umgesetzt wurde.
      Grüße , xChRoNiKx

      Nützliche Links:
      Visual Studio Empfholene Einstellungen | Try-Catch heißes Eisen
      Ist halt die Frage ob man named groups brauch, bringt keinen wirklichen Mehrwert und erhöht nur die Komplexität.
      Mir ist es nur aufgefallen weil ich das Pattern einfach stumpf rein kopiert habe :D
      Stimmt, ist aber nicht schwer reinzubringen und macht auch nix komplexer, also warum nicht, kann gern mit dazu.
      Ist jetzt nicht der Monster Code, ist nur eine Datei, eine Klasse mit knapp 500 Zeilen Code (inkl. Leerzeilen und Kommentare, also echt wenig). Will aber natürlich dass es perfekt ist wenn ich den Source poste. Daher der Testlauf :)

      // EDIT: @slice named groups sind implementiert. Beispiel: (?<test>A|B)-\k{test}-\g{test} wobei die ersten beiden immer gleich sein werden und der dritte die referenzierte group neu parsed (das numerische Äquivalent wäre also (A|B)-\1-\g1).

      Link


      www.marius-gerum.de
      PHP lernen | Programmierung | Sonstiger Krempel
      Zum Blog | PHP lernen | GitHub | Gists | List of awesome

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Link“ ()

      Neu

      ich kann garnix damit anfangen

      Link schrieb:

      Beispiel:
      [A-F0-9]{5} generiert sowas wie "9BF4B" oder "EC79E".
      Hello (World|Universe) macht "Hello World" oder "Hello Universe".
      .{10} erzeugt "#g7:T@!3k$" oder "Jx+&(9_3h?"
      Was soll ich mit einem Generator, der mal dies mal das generiert - ist das ein ZufallsGenerator, geht es ums Generieren von Zufalls-Texten?



      Mir ist nicht bekannt, dass Regex zum Generieren von Texten verwendet werden könnte.
      Handelt es sich um eine Erweiterung der Regex-Sprachdefinition?
      Gibts da iwo eine Doku zu?



      Die Site funzt bei mir weder im Firefox noch im InternetExplorer.
      Also eine Combo zum Template selectieren (was immer ein "Template" sein mag) funzt, aber auf Buttons oder den "Generate"-Link klicksen bewirkt ühaupt nix.

      Neu

      Hi,

      ja also so wie's oben eigentlich recht verständlich dargelegt ist - das Tool generiert Texte anhand eines regulären Ausdrucks. Normalerweise wird RegEx ja benutzt um Text zu "finden" - das scheinst du bereits selbst herausgefunden und verstanden zu haben.
      Dass RegEx zum Generieren von Texten verwendet werden könnte, war mir auch nicht bekannt, bis ich spontan die Idee hatte, sowas zu bauen. Eine Doku gibts es in dem Sinne nicht, es gibt ein paar Infos wie es zu benutzen ist und welche aus RegEx allgemeinhin bekannten Konstrukte damit möglich sind, zum einen findest du das in meinem Eingangspost oben und dann nochmal auf der Seite selbst ("Show quick reference").

      ich kann garnix damit anfangen

      Sowas kann schonmal passieren, macht nix.

      Was soll ich mit einem Generator, der mal dies mal das generiert.

      Wenn du schon weißt dass du damit nichts anfangen kannst, ist diese Frage danach recht überflüssig.

      was immer ein "Template" sein mag

      Ein Template ist ein Set von vordefinierten Pattern die als Beispiel dienen bzw. zeigen, welche Möglichkeiten es gibt. Im DropDown findest du ein paar Pattern die du ausprobieren kannst.

      Ich habe das Projekt aus einer lustigen Laune heraus angefangen und weil es eine interessante Herausforderung darstellt. Das Tool bietet flexible Möglichkeiten, einen Random String zu generieren und zugleich aber Regeln festzulegen, wie dieser aussehen kann. Banalste Nutzung wäre ein Passwortgenerator bei dem feste Regeln eingehalten werden können (mindestens soundso viele Buchstaben, Sonderzeichen, Zahlen etc...).

      PS: deine passiv-aggressive Art mir zu antworten kannst du vielleicht in Zukunft bitte unterlassen.


      Link :thumbup:


      www.marius-gerum.de
      PHP lernen | Programmierung | Sonstiger Krempel
      Zum Blog | PHP lernen | GitHub | Gists | List of awesome

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Link“ ()

      Neu

      Hallo

      Ich habe dein Projekt ausprobiert und soweit finde ich es toll. Ja, auch ich kann damit wenig anfangen aber dennoch muss ich sagen das ich es wirklich gut umgesetzt finde.
      Schnell (wirklich performant) und übersichtlich. Wenn jemand nichts damit anfangen kann muss er es nicht probieren.

      Ansonsten gute Arbeit. Wenn die Anzahl der "Templates" wächst wäre eine Suchfunktion dann vieleicht toll.

      Grüße
      Sascha
      If _work = worktype.hard Then Me.Drink(Coffee)
      Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

      ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

      Neu

      ErfinderDesRades schrieb:

      Mir ist nicht bekannt, dass Regex zum Generieren von Texten verwendet werden könnte.
      Handelt es sich um eine Erweiterung der Regex-Sprachdefinition?
      Gibts da iwo eine Doku zu?


      Reguläre Ausdrücke beschreiben eine Sprache der Menge der regulären Sprachen (Sprachen also die mit Typ 3 Grammatiken erzeugt werden), das ist:
      Sie definieren formal welche Wörter eine Sprache erzeugen kann.
      Reguläre Ausdrücke sind also eigentlich nichts anderes als eine formale Definition einer regulären Sprache, denn zu jedem regulären Ausdruck existiert eine äquivalente Grammatik, die
      diese Sprache produziert.
      Der Autor dieses Threads hat also im Grunde nichts anderes gemacht als einen regulären Ausdruck in eine äquivalente Grammatik zu überführen und dann nach den Produktionsregel Wörter zu erzeugen, die von einem endlichen Automaten akzeptiert wird.

      Paraphrasiert also: Reguläre Ausdrücke sind ein Mittel zur Beschreibung, welche Wörter ("Texte") eine reguläre Sprache erzeugen kann.

      (a|b)*(a|b) erzeugt exemplarisch Wörter der Sprache die mit beliebig vielen a's oder b's beginnen und entweder mit einem a oder einem b enden.
      _
      DotNETWork (Generische Tcp-Klasse, verschlüsselt!)
      MonogameMinecraftClone (Minecraft-Klon)
      NeuroEvolution (Implementation zweier Lernmethoden für neuronale Netze)

      Neu

      Hi,

      es sind nun weitere Neuerungen und Verbesserungen hinzugekommen:

      Hex-Codes mit \x
      Hex-Angabe via \x und zweistelligem Hexcode ist möglich, d.h. \x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21 produziert "Hello World!", \xF0\x9F\x98\x81\xF0\x9F\x98\x93\xF0\x9F\x98\x8D\xF0\x9F\x98\x82\xF0\x9F\x98\xA1 produziert Emojis (die sich hier im Forum nicht darstellen lassen... Ergebnis ist hier)
      Siehe auch apps.timwhitlock.info/emoji/tables/unicode

      Charcode mit \#
      Angabe via Charcode ist möglich, \#72\#101\#108\#108\#111\#032\#087\#111\#114\#108\#100\#033 produziert auch "Hello World!"
      Info: Beginnende Nullen können dazugeschrieben oder weggelassen werden, wie man will.

      Umlaute
      Generelle Verbesserung sodass auch Umlaute direkt unterstützt werden (Beispiel-pattern [€µéÉèÈáÁàÀúÚùÙóÓòÒíÍìÌêÊâÂîÎôÔûÛ´°äöüßÄÖÜ]{50} erzeugt ordentliche Ergebnisse)

      Unicode Unterstützung mit \U
      - Unicode-Zeichen lassen sich mit der \u btw. \U Notation direkt angeben, d.h. \uAF31 produziert "꼱", abc \u202e 123 erzeugt "abc 321" (Right-Left-Override Zeichen) usw..
      Groß- oder Kleinschreibung ist natürlich egal. Es funktionieren auch die Schreibweisen \U+AF31 oder \U{AF31} oder sogar \U+{AF31}.
      Hinweis: empfohlen sind die Schreibweisen mit den geschweiften Klammern denn nur dort sind die Abgrenzungen klar definiert (Beispiel das "F" soll nach dem Symbol kommen).

      Bugfix
      Fehler behoben bei Character classes deren Meta-Angaben sich gegenseitig ausschließen, wie z.B. in [^\w\W] - derlei Konstrukte erzeugen nun einfach nur leere Strings.

      Performance

      Performance-Verbesserung sodass redundante rekursive Aufrufe vermieden werden.

      Screenshot:



      Änderungen und Neuerungen können auch direkt auf http://regex.marius-gerum.de/ nachverfolgt werden, einfach auf "Info & How to use" klicken.


      Link :thumbup:


      www.marius-gerum.de
      PHP lernen | Programmierung | Sonstiger Krempel
      Zum Blog | PHP lernen | GitHub | Gists | List of awesome

      Dieser Beitrag wurde bereits 18 mal editiert, zuletzt von „Link“ ()