Ich schreibe ein Java-Dienstprogramm, mit dem ich viele Daten für Leistungstests generieren kann. Es wäre wirklich cool, einen regulären Ausdruck für Strings angeben zu können, damit mein Generator Dinge ausspuckt, die dazu passen. Gibt es da draußen schon etwas Gebackenes, mit dem ich das machen kann? Oder gibt es eine Bibliothek, die mich den größten Teil des Weges dorthin bringt?
Vielen Dank
Antworten:
Bearbeiten: Wie in den Kommentaren erwähnt, steht bei Google Code eine Bibliothek zur Verfügung, um dies zu erreichen: https://code.google.com/archive/p/xeger/
Siehe auch https://github.com/mifmif/Generex, wie von Mifmif vorgeschlagen
Originale Nachricht:
Erstens glaube ich, dass dies mit einem ausreichend komplexen regulären Ausdruck unmöglich sein kann. Aber Sie sollten in der Lage sein, etwas für einfache reguläre Ausdrücke zusammenzustellen.
Wenn Sie sich den Quellcode der Klasse java.util.regex.Pattern ansehen, werden Sie feststellen, dass eine interne Darstellung von Knoteninstanzen verwendet wird. Jede der verschiedenen Musterkomponenten hat ihre eigene Implementierung einer Knotenunterklasse. Diese Knoten sind in einem Baum organisiert.
Wenn Sie einen Besucher erstellen, der diesen Baum durchquert, sollten Sie in der Lage sein, eine überladene Generatormethode oder eine Art Builder aufzurufen, der etwas zusammenschustert.
quelle
[\w]
. Ein Blick in die letzte Zeile ihres Wikis sagt uns das.dk.brics.automaton
also darauf vorbereitet, POM-Abhängigkeiten von Drittanbietern hinzuzufügen. Die meisten Leute haben nichts dagegen, aber ich wünschte, es gäbe etwas Kompakteres.Es ist zu spät, um dem Originalplakat zu helfen, aber es könnte einem Neuling helfen. Generex ist eine nützliche Java-Bibliothek, die viele Funktionen für die Verwendung von regulären Ausdrücken zum Generieren von Zeichenfolgen bietet (zufällige Generierung, Generierung einer Zeichenfolge basierend auf ihrem Index, Generierung aller Zeichenfolgen ...).
Beispiel:
Offenlegung
Das in diesem Beitrag erwähnte Projekt gehört dem Benutzer, der die Frage beantwortet (Mifmif). Gemäß den Regeln muss dies zur Sprache gebracht werden.
quelle
Xeger (Java) kann das auch:
quelle
Dafür habe ich meine eigene Bibliothek ins Rollen gebracht (In c #, sollte aber für einen Java-Entwickler leicht verständlich sein).
Rxrdg begann als Lösung für ein Problem beim Erstellen von Testdaten für ein reales Projekt. Die Grundidee besteht darin, die vorhandenen Validierungsmuster (reguläre Ausdrücke) zu nutzen, um zufällige Daten zu erstellen, die solchen Mustern entsprechen. Auf diese Weise werden gültige Zufallsdaten erstellt.
Es ist nicht so schwierig, einen Parser für einfache Regex-Muster zu schreiben. Die Verwendung eines abstrakten Syntaxbaums zum Generieren von Zeichenfolgen sollte noch einfacher sein.
quelle
Beim Stackoverflow-Podcast 11:
Dies ist wahrscheinlich nicht das, wonach Sie suchen, aber es könnte ein guter Ausgangspunkt sein, anstatt Ihren eigenen zu erstellen.
Ich kann anscheinend nichts in Google finden, daher würde ich vorschlagen, das Problem zu lösen, indem ich einen bestimmten regulären Ausdruck in die kleinsten Arbeitseinheiten (\ w, [xx], \ d usw.) zerlege und einige grundlegende Methoden zur Unterstützung schreibe diese Sätze mit regulären Ausdrücken.
Für \ w hätten Sie also eine Methode getRandomLetter (), die einen beliebigen zufälligen Buchstaben zurückgibt, und Sie hätten auch getRandomLetter (char startLetter, char endLetter), die Ihnen einen zufälligen Buchstaben zwischen den beiden Werten gibt.
quelle
Ich weiß, dass es bereits eine akzeptierte Antwort gibt, aber ich habe den Datengenerator von RedGate (den in Craigs Antwort erwähnten) verwendet und er funktioniert WIRKLICH gut für alles, was ich darauf geworfen habe. Es ist schnell und das lässt mich den gleichen regulären Ausdruck verwenden, um die realen Daten für Dinge wie Registrierungscodes zu generieren, die dieses Ding ausspuckt.
Es braucht einen regulären Ausdruck wie:
und es generiert Tonnen von eindeutigen Codes wie:
Ist dies ein großer geheimer Algorithmus, den RedGate herausgefunden hat und bei dem wir alle kein Glück haben, oder ist es etwas, was wir Sterblichen tatsächlich tun könnten?
quelle
Ich bin auf dem Flug und habe gerade die Frage gesehen: Ich habe die einfachste, aber ineffiziente und unvollständige Lösung geschrieben. Ich hoffe, es kann Ihnen helfen, Ihren eigenen Parser zu schreiben:
quelle
Diese Frage ist wirklich alt, obwohl das Problem für mich tatsächlich war. Ich habe xeger und Generex ausprobiert und sie scheinen meine Anforderungen nicht zu erfüllen. Sie verarbeiten tatsächlich einige der Regex-Muster (wie
a{60000}
) nicht oder für andere (z. B.(A|B|C|D|E|F)
) erzeugen sie einfach nicht alle möglichen Werte. Da ich keine andere geeignete Lösung gefunden habe, habe ich meine eigene Bibliothek erstellt.https://github.com/curious-odd-man/RgxGen
Es gibt auch Artefakte auf Maven Central zur Verfügung.
Anwendungsbeispiel:
quelle
Sie müssen Ihren eigenen Parser schreiben, wie es der Autor von String :: Random (Perl) getan hat. Tatsächlich verwendet er nirgendwo in diesem Modul Regexe, sondern genau das, was Perl-Codierer gewohnt sind.
Auf der anderen Seite können Sie sich vielleicht die Quelle ansehen , um einige Hinweise zu erhalten.
EDIT: Verdammt, Blair hat mich um 15 Sekunden geschlagen.
quelle
Es ist weit davon entfernt, einen vollständigen PCRE-Regexp zu unterstützen, aber ich habe die folgende Ruby-Methode geschrieben, um einen Regexp-ähnlichen String zu verwenden und eine Variation davon zu erstellen. (Für sprachbasiertes CAPTCHA.)
quelle
Diese Frage ist sehr alt, aber ich bin bei meiner eigenen Suche darauf gestoßen, daher werde ich ein paar Links für andere einfügen, die möglicherweise nach derselben Funktionalität in anderen Sprachen suchen.
quelle
Wenn Sie "kritische" Zeichenfolgen generieren möchten, sollten Sie Folgendes berücksichtigen:
EGRET http://elarson.pythonanywhere.com/ , das "böse" Zeichenfolgen generiert, die Ihre regulären Ausdrücke abdecken
MUTREX http://cs.unibg.it/mutrex/ , das durch Regex-Mutation Fehlererkennungszeichenfolgen generiert
Beide sind akademische Werkzeuge (ich bin einer der Autoren des letzteren) und funktionieren ziemlich gut.
quelle