| Ein regulärer Ausdruck ist allgemein ein Muster (engl. Pattern), das mit dem zu untersuchenden String verglichen und auf Übereinstimmungen (Matches) überprüft wird. 2.1 Zeichen/Zeichenfolgen/Zeichenklassen Beginnen wir mit einem einfachen Beispiel, der Überprüfung, ob ein String den Buchstaben "b" enthält. Der entsprechende reguläre Ausdruck dazu sieht folgendermaßen aus: b Was bedeutet dies nun genau? Die RegEx-Maschine durchsucht einen String von links nach rechts und überprüft, ob der Buchstabe "b" auftritt. Der Ausdruck passt (matcht) also auf "Buchstabe" oder "bla bla bla", aber nicht auf "Zahl" oder "Buch" (Groß-/Kleinschreibung wird unterschieden!). Genauso lässt sich auch das Auftreten einer Zeichenfolge testen: test passt zum Beispiel auf "getestet" und "testen". Eine weitere Möglichkeit, das Auftreten von Buchstaben zu überprüfen sind sogenannte Zeichenklassen. Dabei kann man eine Gruppe von Zeichen zusammenstellen, die alternativ vorkommen können. [abc] passt dementsprechend auf jeden String, der entweder ein a, b, oder c enthält. Die gesamte Klammer stellt also nur ein Zeichen im Suchmuster dar. Dieses Verfahren lässt sich auch genau umgekehrt verwenden: [^abc] steht für ein beliebiges Zeichen außer a, b und c. Außerdem lassen sich in Zeichenklassen auch Bereiche angeben: [a-z] matcht also einen beliebigen Kleinbuchstaben. 2.2 Platzhalter und Steuerzeichen In vielen Fällen, kann oder will man allerdings die zu findenden Zeichen nicht so genau angeben, sondern auch beliebige Zeichen erlauben. Dazu existiert in regulären Ausdrücken der Punkt . als Metazeichen, das standardmäßig alle Zeichen außer dem Zeilenumbruch findet. a. passt also auf "an" oder "ab" etc. Oftmals möchte man aber nicht unbedingt alle Zeichen erlauben, sondern nur Buchstaben oder nur Zahlen. Auch dafür gibt es in regulären Ausdrücken Kurzformen: | String | Bedeutung | Erklärung | | \d | digit | Ziffern 0 bis 9 | | \D | | Jedes Zeichen außer 0 bis 9 | | \w | word | Wort-Zeichen sind Buchstaben, Zahlen und der Unterstrich _ | | \W | | Alles außer den Zeichen von \w | | \s | space | Leerzeichen, Tabulatoren oder Zeilenumbruch | | \S | | alles außer \s | Tabelle 2.1: Spezielle Zeichenklassen \d matcht zum Beispiel eine beliebige Zahl. 2.3 Klammern und Alternativen Grundsätzlich können in regulären Ausdrücken runde Klammern gesetzt werden, um bestimmte Abschnitte zusammenzufassen. Besonders hilfreich ist das, um Alternativmöglichkeiten anzugeben. Diese werden in Klammern gesetzt und durch einen senkrechten Strich (Pipe) | getrennt: (ab|an)geben matcht z.B. "angeben" und "abgeben". 2.4 Quantifiers (Wiederholungsoperatoren) Zeichenwiederholungen können in regulären Ausdrücken mit Wiederholungsoperatoren gekennzeichnet werden. Das Fragezeichen ? bedeutet: das Zeichen vor dem Fragezeichen oder auch nicht. aus? matcht also "aus" und "au". Das Pluszeichen + bedeutet: eine oder mehrere Wiederholungen des Zeichens, das vor dem Pluszeichen steht. aus+ matcht also "aus", "auss", "ausss", etc. Das Sternzeichen * bedeutet: keine, eine oder mehrere Wiederholungen des Zeichens, das vor dem Sternzeichen steht. aus* matcht also "au", "aus", "auss", etc. Wenn vor den Zeichen + oder * ein Punkt . steht (der für ein fast beliebiges Zeichen steht), erzeugt man einen Platzhalter, der dem *-Platzhalter in der DOS/Windows-Welt, etwa bei Dateinamen, oder auch bei der Google-Suche entspricht: aus.* findet "aus", "ausgeben", "ausgehen", "ausfahrbar" etc. Geschweifte Klammern mit einer Zahl oder zwei durch Komma getrennten Zahlen darin stehen für Wiederholungen des Zeichens vor der geschweiften Klammer an der betreffenden Stelle. Dabei können Sie auch das Punktzeichen vor der geschweiften Klammer notieren. In diesem Fall bedeutet die Angabe innerhalb der geschweiften Klammer: so viele beliebige Zeichen wie angegeben. Die erste Zahl in den Klammern bedeutet dabei die Mindest-, die zweite die Höchst-Anzahl an Zeichen. x{3,6} matcht zwischen 3 und 6mal "x". Wird eine der beiden Zahlen weggelassen, so gilt entsprechen nur eine Mindest- bzw. Höchstzahl, also x{3,} für 3 und mehr "x" bzw. x{,5} für 0 bis 5 "x". Wird nur eine Zahl ohne Komma notiert, so gilt diese als genaue Anzahl an Zeichen: x{7} matcht genau 7mal "x". Alle der aufgeführten Quantifiers (Wiederholungsoperatoren) gelten dabei nicht nur für einzelne Zeichen, wie in den bisherigen Beispielen, sondern lassen sich auch auf geklammerte Zeichenklassen oder Teile des regulären Ausdrucks anwenden. (abc)+ matcht z.B. "abc", "abcabc", "abcabcabc" etc. und (a.){2,3} matcht 2- bis 3mal ein "a" gefolgt von einem beliebigen Zeichen, also z.B. "axax" oder "a-a-a-". 2.5 Anfang/Ende In regulären Ausdrücken gibt es auch spezielle Zeichen, die Zeilen- bzw. String-Anfang und -Ende kennzeichnen. Das Caret-Zeichen ^ steht dabei für den Zeilenanfang, das Dollarzeichen $ für das Zeilenende. ^abc matcht also die Zeichenkette "abc", aber nur wenn diese am Anfang des untersuchten Strings steht, abc$ matcht "abc" nur am Ende des untersuchten Strings. 2.6 Metazeichen Alle bis jetzt genannten Zeichen, also . ? + * ^ $ \ ( ) [ ] { } haben spezielle Bedeutungen in regulären Ausdrücken. Um diese Zeichen im Text zu finden, müssen sie daher mit einem Backslash \ gekennzeichnet werden: \. matcht einen Punkt (und kein beliebiges Zeichen). |