Beispiele für ungültige RegEx gesucht

moronoxyd

Moderator i.R. - mostly harmless
Themenstarter
Registriert
22 Mai 2007
Beiträge
10.530
Hallo,

Ich soll bei einem Programm überprüfen, ob es in einem Eingabefeld nur gültige RegExp (reguläre Ausdrücke) erlaubt.
Sprich: Ich muß prüfen, ob es ungültige RegExp nicht erkennt.

Nun arbeite ich selbe eher selten mit RegEpx und tue mich daher schwer, Beispiele für ungültige Ausdrücke zu finden.
Beispiele wären z.B. "*" (wenn jemand Wildcards mit RegExp verwechselt), ".**", "[" (ohne schließende Klammer).

Ich würde mich freuen, wenn ihr mir ein paar weitere Beispiele nennen könntet.
 
Ähmmm... in welchen Programm oder in welchen Umgebungen sollen die Ausnahmen der RegExp denn nicht gelten?
 
Ich würde eher in deiner Programmiersprache versuchen, das Regex zu erstellen und die Exception verwerten, falls eine auftaucht.
Minibeispiel in Javascript:
Code:
[FONT=courier new]
function testRegex(regexStr) {
       var r;

       try {
             r = new RegExp([FONT=courier new]regexStr[/FONT]);
       } catch (e) {
             return false;
       }

       return true;
}[/FONT]

> testRegex('[a-z]');
< true
> testRegex('[a-z');
< false
 
Zuletzt bearbeitet:
https://www.regex101.com/
und einfach drauflostippen ;)
a) falls du typische Vertipper abtesten willst, nimm dir einfach eine Seite voller regexs und tippe diese so schnell du kannst blind in ein Word Dokument(Vertipper erwünscht ;) ), danach jage diese durch den Tester und prüfe mit den falschen dein Programm ;)
b) oder du nimmst dir einfach alle "Regeln" die dir für RegEx einfallen und machst für jede Regel ein "false-positive" also genau einen Ausdruck der nur diese eine Regel bricht.
 
Das topic ist nicht trivial - es handelt sich thematisch um Compilerbau. Normalerweise würdest Du die Sprache beschreiben und für lexikalische und sematische Analyse Tools wie lex und yacc (oder deren GNU-Äquivalent) verwenden. Die Tools generieren C-Code, der direkt eingebunden werden kann.
 
Ähmmm... in welchen Programm oder in welchen Umgebungen sollen die Ausnahmen der RegExp denn nicht gelten?
Das Programm kennst du nicht, verfaßt ist es in Java. Der Ersteller hat natürlich nicht dokumentiert, gegen welche Ausprägung von RegExp er prüft, aber ich vermute mal, daß er auf Posix Basic prüft. Zumindest habe ich schon Posix Extended-Ausdrücke gefunden, die er nicht korrekt erkennt.


Es geht nicht darum, daß ich etwas entwickeln will, welches ungültige RegExp erkennt, sondern wir haben ein Programm zugeliefert bekommen. In älteren Versionen gab es da keine Überprüfung auf ungültige Ausdrücke, jetzt wurde so eine Überprüfung eingebaut. Und die will ich halt mal testen.
 
Es geht nicht darum, daß ich etwas entwickeln will, welches ungültige RegExp erkennt, sondern wir haben ein Programm zugeliefert bekommen. In älteren Versionen gab es da keine Überprüfung auf ungültige Ausdrücke, jetzt wurde so eine Überprüfung eingebaut. Und die will ich halt mal testen.

Vielleicht fängst Du da mal an zu graben. Im Übrigen finde ich Deine Beschreibung zu widersprüchlich: Du willst nichts entwickeln was "ungültige RegExp erkennt" aber Du willst eine "Überprüfung auf ungültige Ausdrücke" testen.
 
Jemand anderes hat eine solche Überprüfung in ein Programm eingebaut, und ich soll testen, ob diese in der Praxis wirklich macht, was sie soll.
Sprich: Ich habe das Programm (nicht den Quellcode) vor mir und soll schauen, ob es ungültige reguläre Ausdrücke auch (halbwegs zuverlässig) erkennt. Vollständig sicher kann ich das auf dem Weg natürlich nicht herausfinden. Aber je mehr "typische" Fehler ich teste, desto wahrscheinlicher ist es, daß der Programmierer seine Arbeit gut gemacht hat.
 
Sicher, für t -> unendlich findest Du alle Fehler. Ein strukturierter Ansatz könnte aber Zeit sparen. Für Dein Vorhaben könntest Du auch eine Testsuite (automatisiertes Testen) in Deine Überlegungen mit einbeziehen. Eventuell mal in einem Entwicklerforum oder im IRC fragen.
 
Sicher, für t -> unendlich findest Du alle Fehler.
Danke, daß du nicht liest, was ich schreibe. Ich habe explizit darauf hingewiesen, daß ich auf dem Weg natürlich nicht alle Fehler finde.


Ein strukturierter Ansatz könnte aber Zeit sparen. Für Dein Vorhaben könntest Du auch eine Testsuite (automatisiertes Testen) in Deine Überlegungen mit einbeziehen. Eventuell mal in einem Entwicklerforum oder im IRC fragen.
Wenn dieser strukturierte Ansatz aber mehr Zeit kostet, als der Situation angemessen ist, dann ist das keine Lösung.
Und wenn man nicht gerade eine fertige Testsuite findet, muß man für das Konfigurieren von dieser auch wieder eine Liste von Tests (= Liste von gültigen und ungültigen RegExps) zusammenstellen oder automatisierte Tests gegen die Regeln erstellen (was schon daran scheitert, daß der Entwickler nicht dokumentiert hat, welchen Standard er hier betrachtet).
Und das geht halt weit über die Aufgabe hinaus, die ich hier vor mir habe.
 
Und wenn man nicht gerade eine fertige Testsuite findet, muß man für das Konfigurieren von dieser auch wieder eine Liste von Tests (= Liste von gültigen und ungültigen RegExps) zusammenstellen oder automatisierte Tests gegen die Regeln erstellen (was schon daran scheitert, daß der Entwickler nicht dokumentiert hat, welchen Standard er hier betrachtet).
Und das geht halt weit über die Aufgabe hinaus, die ich hier vor mir habe.
Um Dich mal zu zitieren "Danke, daß du nicht liest, was ich schreibe." - Aus diesem Grund habe ich Dir empfohlen in einem Entwicklerforum oder im IRC nachzufragen. Mit 99,7%iger Wahrscheinlichkeit wird die Suite angepasst werden müssen.

Stellt sich noch die Frage, ob eine entsprechende Doku des Programms nicht Pflicht ist und der Entwickler Details zu seinen RegEx rausrücken muß.

Ergänzung: IIRC kann man unter Java mit Tools die verwendeten Klassen/Methoden herausbekommen, so daß Du so etwas mehr Einblick bekommst.
 
Zuletzt bearbeitet:
Aus diesem Grund habe ich Dir empfohlen in einem Entwicklerforum oder im IRC nachzufragen. Mit 99,7%iger Wahrscheinlichkeit wird die Suite angepasst werden müssen.
Und damit übersteigt der Aufwand den Nutzen (in meinem konkreten Fall).


Ergänzung: IIRC kann man unter Java mit Tools die verwendeten Klassen/Methoden herausbekommen, so daß Du so etwas mehr Einblick bekommst.
Ich bin kein Entwickler. Meine begrenzten Programmierkenntnisse umfassen kein Java. Und ich kenne mich, wie bereits erwähnt, nicht besonders gut mit RegExp aus. Diese werden beim Parsen der Eingabe auf Gültigkeit aber mit Sicherheit intensiv genutzt. D.h. es würde eine ganze Weile dauern, bis ich mich durch den entsprechenden Teil des Quellcodes gekämpft hätte.
Das sprengt wieder das Kosten/Nutzen-Verhältnis.
 
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben