Reguläre Ausdrücke - Tutorial Teil 5: Zeichengruppen und Zeichenklassen

 

0 Kommentare | Kommentar schreiben | Bewerten | Artikel melden

 

Typ

Tutorial für Anfänger

Kategorie

Tools & Nützliches

Sprache

Deutsch

Autor

Stefan Trost Media

Eintrag

13.07.2011

Bewertungen

142

Views

5568
 
 


Ü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 Media
Artikel von Stefan Trost Media

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

 

© 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.