Reguläre Ausdrücke - Tutorial Teil 5: Zeichengruppen und Zeichenklassen
0 Kommentare | Kommentar schreiben | Bewerten | Artikel melden
TypTutorial für Anfänger |
KategorieTools & Nützliches | SpracheDeutsch |
AutorStefan Trost Media |
Eintrag13.07.2011 |
Bewertungen142 |
Views5568 |
Über den Autor
Stefan Trost ist Entwickler von Software und Weblösungen und kümmert sich auch gerne um Ihre individuellen Softwarewünsche oder Webauftritte. Kontakt
Profil von Stefan Trost MediaArtikel von Stefan Trost Media
Ähnliche Themen
- PHP: Nur bestimmte Buchstaben, Zahlen und Zeichen in einem String zulassen
Tipp | 10 Kommentare - PHP: Strings mit Ctype-Funktionen auf Zeichenklassen überprüfen
Artikel | 0 Kommentare - PHP: Beliebige Zeichen am Anfang und Ende eines Strings entfernen
Tutorial | 0 Kommentare - JavaScript: Letztes Zeichen aus String entfernen
Tipp | 0 Kommentare - MySQL: Reguläre Ausdrücke in MySQL-Abfragen
Info | 0 Kommentare - Textarea Maxlength: Maximale Zeichenanzahl in HTML Textarea begrenzen
Tutorial | 4 Kommentare
In diesem Teil des Tutorials beschäftigen wir uns mit Zeichengruppen und Zeichenklassen. Diese sind nicht zwingend notwendig, da sie sich auch auf andere Art und Weise darstellen ließen, aber sie machen das Arbeiten mit regulären Ausdrücken um einiges einfacher. Vor allem weil Sie dadurch viel Schreibarbeit sparen können. Diese Teile sind bisher erschienen:
Teil 1: Einführung und Grundlagen | Teil 2: Einfache Zeichenketten, Wiederholungen und Gruppieren | Teil 3: Metazeichen | Teil 4: Zeichenauswahl und alternative Zeichen | Teil 5: Zeichengruppen und Klassen | Teil 6: Wiederverwendung und Rückwärtsreferenzen | Teil 7: Modifikatoren | Teil 8: Anwendung und Beispiele
Wichtiger Hinweis
Um die Beispiele auszutesten und selber mit regulären Ausdrücken zu experimentieren, können Sie das Programm Text Konverter in der kostenlosen Basic Version benutzen. Wie Sie das Programm verwenden, wird im ersten Teil des Tutorials erklärt.
Zeichengruppen
Bislang haben wir jedes Zeichen explizit ausgeschrieben. Wenn wir entweder ein "a", "b" oder ein "c" suchen wollten, haben wir eine Zeichenauswahl [abc] benutzt. Was aber sollen wir machen, wenn wir generell nach einer ganzen Gruppe von Zeichen suchen möchten? Bei der Gruppe der Zahlen geht es vielleicht noch mit [1234567890] aber was machen wir bei den Buchstaben? Dass das Aufschreiben von allen Buchstaben etwas zu umständlich ist, haben sich auch die Entwickler von regulären Ausdrücken gedacht und daher Gruppen von Zeichen erfunden.
Beispiel 1
Suchen nach: Ersetzen mit: Original: Nach Ersetzung:
[a-z] X ABCTZU abcolm 2317 ABCTZU XXXXXX 2317
[A-Z] X ABCTZU abcolm 2317 XXXXXX abcolm 2317
[0-9] X ABCTZU abcolm 2317 ABCTZU abcolm XXXX
[a-d] X ABCTZU abcolm 2317 ABCTZU XXXolm 2317
[U-Z] X ABCTZU abcolm 2317 ABCTXX abcolm 2317
[3-9] X ABCTZU abcolm 2317 ABCTZU abcolm 2X1X
[A-Ya-z0-9] X ABCTZU abcolm 2317 XXXXZX XXXXXX XXXX
Eine Gruppe von Zeichen definiert man einfach mit einem -. So steht [a-z] für alle kleinen Buchstaben, [A-Z] für alle großen Buchstaben und [0-9] für alle Zahlen. Gezeigt ist dies in den ersten Zeilen von Beispiel 1.
Aber auch kleinere Bereiche einer Auswahl sind möglich. So steht [a-d] für die Buchstaben a,b,c oder d ([abcd] würde das selbe bedeuten). In den nächsten Zeilen von Beispiel 1 ist dies verdeutlicht.
Sie können auch mehrere Gruppen von Zeichen in einer Zeichengruppe kombinieren. In der letzten Zeile von Beispiel 1 haben wir die Zeichengruppen 0 bis 9, a bis z und A bis Y miteinander kombiniert, so werden alle Buchstaben außer Z sowie alle Ziffern im Original ersetzt. Konkret heißt dieser reguläre Ausdruck: Finde mir ein Zeichen, das in dieser Auswahl vorkommt. Im Original kommt als erstes ein "A". Dieses ist in der Auswahl enthalten und wird daher ersetzt. Anschließend wird das "B" angesehen, das auch in der Auswahl enthalten ist und so ebenfalls ersetzt wird und so weiter.
Beispiel 2
Suchen nach: Ersetzen mit: Original: Nach Ersetzung:
[-a-z] X abcdefgh-ijz XXXXXXXXXXXX
[a-z-] X abcdefgh-ijz XXXXXXXXXXXX
[-az] X abcdefgh-ijz XbcdefghXijX
[a\-z] X abcdefgh-ijz XbcdefghXijX
[a-z] X abcdefgh-ijz XXXXXXXX-XXX
Im Beispiel 2 sehen wir einige Besonderheiten. Steht ein Metazeichen an einer Stelle, an der es eigentlich keinen Sinn ergibt, wird dieses als normales Zeichen aufgefasst. In den ersten drei Zeilen steht der Bindestrich entweder vor oder nach der Zeichenauswahl und wir hier neben der Zeichengruppe a bis z oder den einzelnen Zeichen a und z als eigenständiges Zeichen erkannt und entsprechend ersetzt. Der Ausdruck [-az] findet daher die Zeichen "-", "a" und "z" und sonst keines. Im Beispiel [a\-z] ist das Metazeichen "-" escaped. Daher wird auch hier "-", "a" und "z" gefunden und keine Gruppe von a bis z oder dergleichen. In der letzten Zeile haben wir noch einmal eine normale Zeichengruppe mit [a-z] gegenübergestellt. Im Vergleich sieht man, dass hier wirklich nur die Buchstaben a bis z ersetzt werden.
Negation von Zeichen
Beispiel 3
Suchen nach: Ersetzen mit: Original: Nach Ersetzung:
[^a] X abcdefga-ijz aXXXXXXaXXXX
^[a] X abcdefga-ijz Xbcdefgh-ijz
Manchmal ist es einfacher Zeichen zu definieren, nach denen man nicht suchen möchte anstatt alle Zeichen anzugeben, nach denen man sucht. Auch das geht mit regulären Ausdrücken. Im Beispiel 3 suchen wir nach allen Zeichen außer dem "a". Dazu wird abermals das Metazeichen ^ verwendet, dass schon für "Zeichen am Beginn einer Zeichenkette" stand. In dem Moment wo ^ aber nicht am Beginn eines regulären Ausdrucks verwendet wird, bedeutet es "nicht". In der zweiten Zeile von Beispiel 3 schauen wir uns deswegen an, was passiert wenn im selben Ausdruck das ^ nach vorne rückt. Jetzt bedeutet es "suche ein a, das am Anfang einer Zeichenkette steht" statt "suche alle Zeichen außer a". Deswegen werden in der ersten Zeile alle Zeichen außer den beiden "a" ersetzt und in der zweiten Zeile wird nur das "a" am Beginn der Zeichenkette gefunden und ersetzt.
Beispiel 4
Suchen nach: Ersetzen mit: Original: Nach Ersetzung:
[^a]bc X abc zbc -bc abc X X
[a]bc X abc zbc -bc X zbc -bc
Wir wollen uns ein weiteres Beispiel ansehen. Das Beispiel 4 ist folgendermaßen zu deuten: Wir suchen eine Zeichenkette, die mit "bc" endet. Davor ist eine Zeichengruppe definiert, die beschreibt, wie da Zeichen vor "bc" sein muss. In der Zeichengruppe steht: "Kein a". Damit findet dieser reguläre Ausdruck "zbc" und "-bc" aber nicht "abc". In der zweiten Zeile haben wir die Negation des Zeichens weggelassen. Nun heißt der Ausdruck: Vor dem "bc" steht ein Zeichen aus der Zeichengruppe "a". Die Zeichengruppe besteht nur aus einem Zeichen, demnach muss das Zeichen vor "bc" ein "a" sein. Ersetzt wird auch nur "abc" in der Zeichenkette.
Zeichenklassen
Einige Zeichengruppen werden sehr häufig benutzt. Das sind zum Beispiel die Großbuchstaben, die Kleinbuchstaben und die Ziffern. Deswegen gibt es für diese Zeichengruppen Abkürzungen, die im Kasten dargestellt sind. Die Abkürzungen wie \d können Sie direkt in einem regulären Ausdruck verwenden. In der Spalte "Entsprechung" sehen Sie, welcher andere reguläre Ausdruck dasselbe bedeutet.
Abkürzung Entsprechung
\d [0-9]
\D [^0-9] oder [^\d]
\w [A-Za-z0-9_]
\W [^A-Za-z0-9_] oder [^\w]
\s Whitespace (Leerzeichen, Umbrüche usw)
\S [^\s] Kein Whitespace
Beispiel 5
Suchen nach: Ersetzen mit: Original: Nach Ersetzung:
\d X abc 123 456 abc X X
\s X abc zbc -bc abcXzbcX-bc
Die Abkürzung \d (für Digits) sucht Ziffern, die Abkürzung \D steht für alle Zeichen, die keine Ziffern sind. \w (für Word) steht für Buchstaben, Ziffern und den Unterstrich während \W alle Zeichen findet, die keine Buchstaben, keine Ziffern und kein Unterstrich sind.
Mit \s (für Space) suchen Sie nach Whitespace, also nach Leerzeichen, Zeilenumbrüchen, Tabs und so weiter, \S entspricht genau dem Gegenteil davon.
Welche Zeichen genau zu den entsprechenden Zeichenklassen gehören kann natürlich je nach Verständnis abweichend sein. Zum Beispiel wenn man sich diverse Unicode Zeichen ansieht. Gehören diese nun zu einer Klasse dazu oder nicht? Deswegen ist es beispielsweise im Text Konverter so, dass die erwartbaren Zeichen bereits standardmäßig in den Klassen enthalten sind, diese Klassen aber benutzerdefiniert angepasst und geändert werden können. So können Sie beispielsweise bestimmte Zeichen als \s oder als \w definieren.
Zuletzt wollen wir uns ein kleines Beispiel ansehen. In Beispiel 5 sehen wir, dass \d dasselbe macht wie [0-9]. Alle Ziffern werden ersetzt. Ebenso können wir nach Whitespace mit \s suchen und die Leerzeichen in dem Text ersetzen.
Beginn und Ende eines Wortes
Mit den Metazeichen ^ und $ haben wir bereits gesehen, wie man geziehlt nach dem Beginn oder dem Ende einer Zeichenkette suchen kann. Interessanter für die Praxis ist vielleicht die Suche am Anfang oder inmitten eines Wortes. Benutzt werden kann dafür \b und \B, im Beispiel ist erklärt wie. Es muss dazu gesagt werden, das \b und \B nicht von allen Programmen unterstützt werden. Der Text Konverter kann damit aber arbeiten.
Beispiel 6
Suchen nach: Ersetzen mit: Original: Nach Ersetzung:
\bab X ab abc babc X Xc babc
bc\b X ab abc babc ab aX baX
\bab\b X ab abc babc X abc babc
Für eine Position am Anfang oder am Ende eines Wortes steht \b. Schreiben wir den regulären Ausdruck "\bab" werden Ersetzungen in den Worten vorgenommen, die mit "ab" beginnen. Wenn wir "bc\b" schreiben, steht dieser Ausdruck für ein Wort, dass mit "bc" endet. Man sieht dies in der zweiten Zeile. Verwenden wir "\bab\b" suchen wir nach einem Wort, das mit "ab" beginnt und mit "ab" endet, also können wir so genau nach einem Wort suchen, das "ab" entspricht. In der dritten Zeile sehen wir, was passiert. Ersetzt wird entsprechend nur das erste "ab".
Beispiel 7
Suchen nach: Ersetzen mit: Original: Nach Ersetzung:
\Bbc X abc babcd bcd aX baXd bcd
bc\B X abc babcd bcd abc baXd Xd
\Bbc\B X abc babcd bcd abc baXd bcd
Die Abkürzung \B steht für eine Position, die nicht am Anfang oder am Ende eines Wortes steht. Einige Beispiele haben wir im Kasten neben diesem Text gesammelt. In der ersten Zeile wird nach einem Wort gesucht, das "bc" enthält, aber das Wort darf nicht mit "bc" beginnen. Gefunden werden zwei Stellen. Anders herum ist es in der nächsten Zeile. Nun suchen wir ein Wort, das "bc" enthalten soll aber bitte nicht damit enden soll. Dadurch wird "abc" nicht mehr gefunden, dafür aber "bcd". Eine Kombination liefert die letzte Zeile, in der wir nach einem Wort suchen, das "bc" enthalten soll, aber weder mit "bc" beginnen noch mit "bc" enden soll. Eine Stelle in der Mitte wird gefunden.
Zusammenfassung
- Mit dem Bindestrich lassen sich Gruppen von Zeichen definieren, zum Beispiel [a-z] für alle Kleinbuchstaben.
- Wenn das Metazeichen ^ nicht am Anfang eines regulären Ausdrucks steht, steht es für eine Negation des nachfolgenden Zeichens
- Bestimmte Zeichengruppen wie Ziffern (\d), Buchstaben, Ziffern und Unterstriche (\w) oder Whitespace (\s) lassen sich durch die in Klammern genannten Abkürzungen darstellen.
- Den Beginn, die Mitte und das Ende eines Wortes kann man mit \b und \B bestimmen und damit Worte finden, die Zeichenketten enthalten, oder mit Zeichenketten beginnen oder enden sollen.
Lesen Sie weiter
- Tutorial Reguläre Ausdrücke, Teil 6: Wiederverwendung und Rückwärtsreferenzen
- Tutorial Reguläre Ausdrücke, Teil 7: Modifikatoren
- Tutorial Reguläre Ausdrücke, Teil 8: Anwendung und Beispiele
© Stefan Trost - Die Verwendung dieses Tutorials, auch in Auszügen, ist nur nach vorheriger Genehmigung von Stefan Trost erlaubt. Sie können das Tutorial aber gerne verlinken.
Kommentare
Sind Sie der selben Meinung wie der Autor oder wollen Sie etwas ergänzen? Hier können Sie einen Kommentar hinterlassen.
Kommentar schreiben
Sie können zu diesem Artikel einen anonymen Kommentar hinterlassen. Möchten Sie unter Ihrem Namen schreiben, loggen Sie sich ein oder registrieren Sie sich.
Bisherige Kommentare
Zu diesem Artikel wurden bislang noch keine Kommentare abgegeben.