Hallo zusammen!
Ich als Regex-Novize habe irgendwie Schwierigkeiten, einen passenden Ausdruck für folgende Aufgabenstellung zu finden:
Ich möchte einen Text validieren, der keine Sonderzeichen außer Punkt, Komma, Bindestrich, Ausrufe- und Fragezeichen enthalten darf. Leerzeichen und Zeilenumbrüche dürfen vorkommen. Das bereitet mir noch keine Schwierigkeiten. Es dürfen aber im Text zwei mit Sonderzeichen versehene Strings enthalten sein, nämlich $[VERSION] und $[NAME]. Diese können irgendwo im Text vorkommen, auch mehrfach. Ich habe dafür folgenden Ausdruck definiert:
([\w \r\n.?!,-]*($[(NAME|VERSION)])*[\w \r\n.?!,-]*)*
Die Idee von mir war, dass vor oder nach den fixen Strings, die 0 oder mehrfach vorkommen dürfen, 0 oder mehrere valide Zeichen stehen dürfen... und das 0 oder mehrmals, damit die Strings auch nicht nur einmal vorkommen dürfen.
Im Prinzip funktioniert das Ganze, solange der Text, den ich prüfe, valide ist. Nur leider endet meine (Java-)Applikation in einer Endlosschleife, wenn ich im Text ein Sonderzeichen wie z.B. = oder $ einbaue bzw. statt $[NAME] $[TEST] schreibe. Ich habe aber keinen blaßen Schimmer, warum...
Wenn ich die äußerste Gruppierung weglasse, also
[\w \r\n.?!,-]*($[(NAME|VERSION)])*[\w \r\n.?!,-]*
verwende, schmiert meine Anwendung nicht ab, wenn die Prüfung fehlschlägt. Allerdings darf dann nur $[VERSION] oder $[NAME] im Text vorkommen, und das auch nur ein einziges Mal.
Vielleicht hat hier der ein oder andere Regex-Profi einen Tipp für mich und kann mir bei der Fehlersuche behilflich sein? Falls jemand eine andere Idee hat, wie man einen solchen Text validieren kann, bin ich natürlich auch dankbar.
Vielen Dank vorab!
Oliver
Es gibt drei Moeglichkeiten, eine Firma zu ruinieren: Mit Spielen, das ist am lustigsten. Mit Frauen, das ist am schoensten. Mit Computern, das ist am sichersten.