In den bisherigen Teilen des Tutorials haben wir Elemente immer so gesucht, das sie an einer bestimmten Stelle vorkommen mussten. Dies ist eher seltener der Fall, denn in der Regel ist es eher so, dass wir nach einer unbestimmten Anzahl von Zahlen oder Buchstaben suchen. Oder das wir nach einem Konstrukt suchen der mit etwas bestimmten anfängt, mit etwas bestimmten aufhört, und dazwischen eine beliebige Anzahl von Zeichen stehen (so zum Beispiel ein Tag in einer HTML-Seite).
Entsprechend benötigen wir die sogenannten Metacharacters der Regular Expressions, die uns erlauben, Wiederholungen durchzuführen. Die wohl bekanntesten Metacharacter sind das Fragezeichen ? und der Asteriks *. Das Fragezeichen bedeutet, dass das davorstehende Zeichen im Suchausdruck keinmal oder einmal vorkommen darf! Eine Suche nach Hoh?l findet zum Beispiel die Wörter Hohl, aber auch Hol.
Der Asterisk bedeutet, dass das davorstehende Zeichen keinmal oder beliebig oft vorkommen darf! Es entspricht im Großen und Ganzen den Wildcards, die man aus der Kommandozeile von Betriebssystemen her kennt. Eine Suche nach Wald* findet zum Beispiel Wald, aber auch Waldschrat.
Im Gegensatz dazu muss beim Metacharacter Plus + das davorstehende Zeichen mindestens einmal vorkommen. Es darf aber auch beliebig oft wiederholt werden. Eine Suche nach [A-C]+ würde zum Beispiel das Wort Bier finden, aber nicht das Zebra. Grund ist, dass das Z natürlich nicht in der Aufzählung [A-C] enthalten ist.
Wenn ein Zeichen mehr als einmal vorkommen muss, kann man geschweifte Klammern {n} verwenden. Wobei das davorstehende Zeichen exakt n-Mal wiederholt werden muss. Eine Suche nach [0-9]{4} findet zum Beispiel alle 4-stelligen Zahlen. Möchte man nach einer bestimmten Anzahl von Zeichen suchen, kann man die geschweiften Klammern auch abwandeln: {n,m} findet von dem davorstehenden Zeichen mindestens n, aber maximal m Stellen. Eine Suche nach [0-9]{3,4} findet demnach alle 3- oder 4-stelligen Zahlen.
Kommen wir zurück zu unserem Suchstring:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC1; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Tablet PC 2.0)
Suche nach: W*in
Findet Windows und Win64
Suche nach: [xX][0-9]{2}
Findet x64
Suche nach: [0-9]+\.[0-9]+
Findet 4.0, 8.0, 6.0, 4.0, 2.0 …
Im nächsten Teil des Tutorials lernen wir das Gruppieren von Suchergebnissen.
[…] Tutorial: Regular Expressions – Wiederholungen. […]
Hallo Guido,
Regex Tuts sind sehr sinnvoll. Arbeite ab und an immer mal wieder damit und da ich es nicht ständig brauche, bin ich über solche Tuts als Gedächtsstütze und Auffrischung immer froh.
Gruß,
Peter