News Ticker

Reguläre Ausdrücke 8: Zeichenklassen

Heute geht es darum eigene Zeichenklassen in regulären Ausdrücken zu definieren und zu benutzen. Dies klingt schwieriger als es eigentlich ist; trotzdem ist Regel 8 wohl eine der wichtigsten und umfangreichsten der 11 Regeln, die in dieser Artikel-Serie vorgestellt werden. Wer sich also bis jetzt eher gelangweilt hat, kommt wohl gleich auf seine Kosten. Regel 8 wurde in fünf Teilregeln gegliedert. Das scheint etwas viel zu sein, jedoch gehören die Regeln logisch zusammen (also zu den Zeichenklassen).

Regel 8a
Die Zeichen zwischen zwei zusammengehörenden eckigen Klammern ([ und ]) definieren und suchen nach einer Zeichenklasse.

So kann man z.B. [01]{2} definieren (und auch gleich danach suchen). Dieser Ausdruck „matcht“ ein beliebiges Zeichen, welches in der Zeichenklasse definiert ist, – zweimal, also 00, 01, 10, 11.

Regel 8b
Ein Zirkumflex (^) als erstes Zeichen in einer Zeichenklasse definiert alle Zeichen, die nicht im Ausdruck vorkommen dürfen, damit er „gematcht“ wird.

Auch hier ein kleines Beispiel: [^12345] sucht nach allen Zeichen außer den angegebenen 5 Zahlen.

Regel 8c
Ein Minuszeichen in einer Zeichenklasse definiert einen Bereich von Ziffern und Buchstaben.

Somit kann man mit [0-9] nach allen Zahlen suchen, ohne alle explizit zu definieren – wie in [0123456789].

Regel 8d
Die Zeichenklasse [:space:] definiert alle Weißräume. Damit sind Leerzeichen, Tabulatoren und Zeilenumbrüche gemeint. Wichtig: Die Zeichenklasse ist mit den eckigen Klammern definiert. Diese kommen also zum Ausdruck hinzu.

a[[:space:]]b sucht somit nach z.B. a[TAB]b oder einfach a b. Dies ist praktisch, da ein Tabulator nicht unbedingt auf z.B. 3 Zeichen festgelegt sein muss – es können auch 4 oder 8 Zeichen sein. Um also seine regulären Ausdrücke kompatibler zu gestalten, kann man [:space] verwenden (und keine statischen Leerzeichen „matchen“).

Regel 8e
Ist eines der Sonderzeichen ([ ] ^ -) zu suchen, muss es an einer Stelle in der Zeichenklasse platziert sein, an der die besondere Bedeutung keinen Sinn ergibt.

[-^1-3] ist ein gutes Beispiel. Ein Minuszeichen benötigt zwei Operatoren (einen vor und einen nach dem Minuszeichen). Da diese nicht vorhanden sind, ist der Ausdruck in seiner eigentlichen Form ungültig. Dadurch wird dem - seine Sonderwirkung entzogen und das Zeichen selbst „gematcht“. Gleiches gilt für ^. Da dieses Zeichen nur am Anfang einen Sinn ergibt, wird auch hier die Sonderbedeutung entzogen und das Zeichen selbst „gematcht“. Der letzte Teil der Zeichenklasse (1-3) ist gültig und definiert drei Zahlen – 1, 2 und 3. Dieser reguläre Ausdruck „matcht“ also z.B. -, ^ oder 2.