Reguläre Ausdrücke - Regexps

Die regulären Ausdrücke, die Sie in den Suchen und Ersetzen Dialogen und an diversen anderen Stellen wie den Attributen 'Merkmal' und 'Primärindex' oder in Checks verwenden können, nutzen alle die standard Java-Regexp-Syntax. Vor QF-Test Version 3.1 wurde das GNU Regexp Package verwendet (vgl. Anhang F), auf welches immer noch mittels der Option Alte GNU-Regexps verwenden (vor 3.1) umgeschaltet werden kann. Ein wesentlicher Unterschied zwischen den beiden ist, dass die Zeichen '{' und '}' für Java-Regexps Sonderzeichen sind, die mit '\' geschützt werden müssen, für GNU dagegen normale Zeichen.

Eine detaillierte Dokumentation für Regexps mit Hinweisen zu weiterführender Information und sogar einem ganzen Buch darüber, finden Sie bei der Java-Dokumentation für die Klasse java.util.regex.Pattern unter http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html. Ebenfalls einen Blick wert ist der Wikipedia-Eintrag.
Die wichtigsten Grundlagen haben wir kurz zusammengefasst:

  • Ein '.' steht für ein beliebiges Zeichen mit Ausnahme eines Zeilenumbruchs. Mit den neuen Java-Regexps können Sie Ihren Ausdruck mit dem eingebetteten Schalter (?s) starten, um zu erreichen, dass mehrzeiliger Text wie eine einzige Zeile behandelt wird und '.' damit für wirklich jedes Zeichen steht. Die alten GNU-Regexps verfügen nicht über derartige Schalter, so dass Sie den Ausdruck '(.|\n)' für ein beliebiges Zeichen verwenden müssen. Leider führt dieser Ausdruck bei Java-Regexps zu einer StackOverflowException, so dass QF-Test jede Regexp, in der dieser Ausdruck vorkommt, automatisch als GNU Regexp behandelt, unabhängig von der Einstellung der Option.
  • Zwischen '[' und ']' können Alternativen angegeben werden.
  • Ein '?' kennzeichnet ein optionales Element das 0 oder 1 mal vorkommen darf.
  • '+' bedeutet mindestens ein Element.
  • Ein '*' bedeutet: beliebig viele des vorhergehenden Elements (auch 0).
  • Eine Gruppe wird mit '(' und ')' gebildet. Die Zählung der Untergruppen beginnt mit 0 für den Gesamtausdruck, 1 für die erste '(' Klammer etc. Bei Suchen und Ersetzen Operationen expandiert $n in der ersetzen Zeichenkette zu der nten Gruppe. Beispiel: Um die Dateiendung aller Dateien welche mit /tmp/ anfangen von .foo mit .bar zu ersetzen, sucht man nach (/tmp/.*)\.foo und ersetzt dann mit $1.bar.
  • Der Balken '|' trennt Alternativen in einer Gruppe.
  • '\' hebt die Sonderbedeutung eines Zeichens auf oder definiert Sonderzeichen, z.B. '\n' für LineFeed (= Zeilenumbruch), '\r' für CarriageReturn (wird für QF-Test nicht benötigt, vgl. Abschnitt 47.4) oder '\t' für Tab.

Beispiele:

  • .* steht für einen beliebigen Text, der optional ist.
  • .+ steht für einen beliebigen Text, wobei allerdings mindestens ein Zeichen vorhanden sein muss, also einen Pflichttext.
  • [0-9] steht für eine beliebige Ziffer.
  • [0-9]+ steht für eine beliebige Folge von Ziffern, aber mindestens eine Ziffer muss vorhanden sein.
  • [0-9]{1,3} steht für eine beliebige Folge von Ziffern, allerdings sollte mindestens eine und maximal drei Ziffern erscheinen.
  • Beliebiger Text, der das Wort 'Baum' enthält: '.*Baum.*'.
  • Beliebiger mehrzeiliger Text: '(?s).*' mit Java und '(.|\n)*' mit GNU-Regexps.
  • Das Wort 'Baum' in beliebigem Text durch das Wort 'Tree' ersetzen: '(.*)Baum(.*)' und zum Ersetzen $1Tree$2. In der Ersetzen Box geht das allerdings einfacher indem Sie einfach 'Baum' durch 'Tree' Ersetzen und dabei die Option 'Gesamtes Attribut vergleichen' ausschalten.
  • Suche nach 'Name' oder 'Namen': 'Namen?'
  • Suche nach 'Baum' oder 'Tree': '(Baum|Tree)'
  • Ein beliebiges Wort aus Buchstaben (ohne Umlaute) und Zahlen: [0-9a-zA-Z]+
  • ...

4.0+ QF-Test bietet Ihnen bei Attributen, welche reguläre Ausdrücke (vgl. Abschnitt 47.3) erlauben, den Kontextmenüeintrag »Text in regulären Ausdruck konvertieren« an, um Sonderzeichen von regulären Ausdrücken mit '\' zu versehen, um diese zu schützen.