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

    • Beta
    • Closed Source

    Es gibt 21 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 Empfohlene 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“ ()

      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.
      Hi,

      ja also so wie's oben bereits 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.

      Gute Frage, aber die Tatsache dass du damit nix anfangen kannst macht die Frage irgendwie redundant.

      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 6 mal editiert, zuletzt von „Link“ ()

      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. ##

      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)
      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“ ()

      Moin,

      sieht gut aus :)

      Wenn du wirklich ausführlich testen möchtest empfehle ich: emailregex.com/
      Wenn da dann ne gescheite Mail bei rauskommt hast du vermutlich die meisten Fälle abgedeckt.
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
      Hi!
      Also danke für die Aufklärung: Es geht also tatsächlich darum Zufallstexte zu generieren anhand von String-Templates (nicht Pattern).
      Dahinter steht eine Grammatik, und die verwendeten Zeichen decken sich zu grossen Teilen mit den Zeichen der Grammatik von Stephen Kleene, die in vielen mir bekannten Programmiersprachen als "Regex" bezeichnet wird, und die dem Pattern-Matching dient.
      Die hiesige Grammatik dient aber nicht dem Pattern-Matching, sondern dem Text-Generieren.
      Also (wie ich vermutete) eine Erweiterung der Kleene-Regexe - oder eben etwas ganz anneres - dassis Ansichtssache.
      Ich war halt irritiert, dass man

      Link schrieb:

      man aus einem RegEx pattern entsprechend Strings generieren kann
      Weil "RegEx pattern" verstehe nachwievor ich als die Kleene-Grammatik, auch wenns natürlich richtig ist (wie ich jetzt gelernt zu haben vermeine), dass zu regulären Grammatiken halt reguläre Ausdrücke gehören.
      Ich find meinen Post auch nicht sonderlich passiv-aggressiv. Es wurde halt um Tests gebeten, und das war mein "Test-Bericht":
      Ich fand keine Zielbeschreibung vor und keine Doku, was wie zu testen wäre, störte und kümmerte mich - wie's meine arrogante Art ist - um irreführende Begrifflichkeiten.
      Ich finde durchaus im Dienste der Sache.
      Ausserdem funztete die Site bei mir ühaupt nicht.

      Nikx schrieb:

      Wenn da dann ne gescheite Mail bei rauskommt hast du vermutlich die meisten Fälle abgedeckt

      Kann ungefähr funktionieren, kommt aber größtenteils Mist dabei raus - zwar korrekter und valider Mist, aber trotzdem E-Mail Adressen, die fürchterlich aussehen würden.

      ErfinderDesRades schrieb:


      Also danke für die Aufklärung: Es geht also tatsächlich darum Zufallstexte zu generieren anhand von String-Templates (nicht Pattern).

      Genau, daher hab ich dich auch auf meine Beschreibung oben und den Reference sowie How to use Bereich verwiesen, dort ist dargelegt welche Konstrukte möglich sind und dass man eben die reguläre Grammatik nutzen kann um -im Gegensatz zum Finden von Text- so eben auch Text aus regulären Ausdrücken zu erzeugen. Mehr steckt da eigentlich gar nicht dahinter :)
      Ich kann leider nicht sehen, wo der Ausdruck "Template" hier irreführend wäre. Damit ist einfach gemeint dass es vordefinierte Pattern gibt die man wenn man will via DropDown auswählen und ausprobieren kann anstatt selbst welche zu schreiben. Aber klar, Template verwende ich in dem Kontext weil es mir intuitiv erscheint, vielleicht wäre ein anderer Begriff noch besser, kann sein.

      Nikx schrieb:


      Ich fand keine Zielbeschreibung vor und keine Doku, was wie zu testen wäre, störte und kümmerte mich - wie's meine arrogante Art ist - um irreführende Begrifflichkeiten.
      ...
      Ausserdem funztete die Site bei mir ühaupt nicht.

      Das ist schade, aber ich habe die Seite in verschiedenen (allerdings auch nur aktuellen) Browsern getestet (Chrome, Edge, Firefox und Chrome) ohne dass mir aufgefallen wäre dass etwas nicht funktioniert. Wenn du sagst dass "überhaupt nix funktioniert" weiß ich nicht was das heißen soll - ich gehe nicht davon aus dass JavaScript bei dir deaktiviert ist. Falls doch, ja, dann geht's sicher nicht, das ist klar. Ich habe außerdem noch die mobile Darstellung verbessert.

      Info:
      Neu ist, dass man die Ergebnisse via JSON oder als Liste abfragen kann, dafür gibt's unten neben "Share the link" was:

      JSON Link


      Ergebnis im Browser


      >> Testen


      Link :thumbup:


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

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

      Interessantes Projekt. Bei solchen Generatoren versuche ich gerne, die Grenzen austesten. Die Fehlermeldungen sind für 0815-Benutzer jedoch unverständlich.
      Das Pattern [A-Za-z]{20000000} löst folgenden Fehler aus:
      Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 536870920 bytes) in /var/www/vhosts/marius-gerum.de/docs.marius-gerum.de/system/objects/Core/RegExStringGenerator.class.php on line 336

      Das Problem wird durch die zu große Zahl an Wiederholungen verursacht. Eventuell solltest du dies abfangen.

      Wenn ich die Zahl reduziere [A-Za-z]{2000000} funktioniert alles. Wenn ich mir das jedoch tausend mal ausgeben lasse, bekomme ich diese Meldung:
      Fatal error: Maximum execution time of 4 seconds exceeded in /var/www/vhosts/marius-gerum.de/docs.marius-gerum.de/system/objects/Core/RegExStringGenerator.class.php on line 173

      Ich verstehe die Meldung, aber nicht jeder. Du solltest diese Fehlermeldung ebenfalls abfangen, eindeutiger formulieren und dem Benutzer sagen, dass er zu viel vom Server verlangt.

      Grüße
      Alle Angaben sind ohne Gewähr und mit Pistole. Glücksspiel und Drogen können süchtig machen. Weitere Infos unter spielen-mit-verantwortung.de und kenn-dein-limit.de.
      Wie viele DAUs benutzen nochmal einen Regex-basierten Zufallsgenerator für Strings?
      Post-AGB:
      §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
      §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
      Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
      §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
      Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen
      Hi,

      die Meldung ist jetzt weg.

      Wie viele DAUs benutzen nochmal einen Regex-basierten Zufallsgenerator für Strings?

      Das Tool ist eigentlich (und auch eher ausschließlich) für Programmierer gedacht, aber ich vermute hier rhetorische Ironie und stimme zu, Anzahl potenzieller DAUs dürfte steil gegen 0 tendieren ;)


      Link :thumbup:


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

      @EaranMaleasi Ich weiß. Da geht es mir dabei eher ums Prinzip. :D
      @Link Standard-Fehlertexte von der Laufzeitumgebung oder vom Parser auszugeben halte ich für schlampig, wenn man sie abfangen kann. Vor allem wenn es ein ziemlich einfacher und durch falsche Bedienung verursachter Fehler ist. Wenn ich jedoch einen Absturz durch sehr kryptische Gegebenheiten bekomme, dann darf ich auch eine kryptische Fehlermeldung bekommen. So ein Fehler wurde nämlich nicht erwartet und kann demnach vom Entwickler auch schwer abgefangen werden.

      Bitte nicht ganz so böse aufnehmen.

      Grüße
      Alle Angaben sind ohne Gewähr und mit Pistole. Glücksspiel und Drogen können süchtig machen. Weitere Infos unter spielen-mit-verantwortung.de und kenn-dein-limit.de.
      Hi,

      zwischen einer Exception und einem Error gibt's nochmal einen Unterschied, aber danke für den Tipp :)


      Link :thumbup:


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

      Also ich habe so nicht daran auszusetzen, fürs Testing und random generieren lassen völlig ok.
      Wäre z.B. auch interessant für das Generieren für Passwörter mit Richtlinien?!

      Das Einzige was mir - nicht mal am Generator selbst - aufgefallen ist:

      Offensichtlich limitierst du ja auf 1k Wiederholungen.
      Mach das bitte auch im Input auf der Website fest, denn ich hab mich zunächst gewundert, wieso 1k genauso lange braucht wie 10k :D

      LG, Acr0most :thumbsup:
      Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
      Signature-Move 8o
      kein Problem mit privaten Konversationen zu Thema XY :thumbup: