Regulärer Ausdruck
Ein regulärer Ausdruck ist eine Möglichkeit, Wörter formaler Sprachen zu beschreiben. Anders als eine formale Grammatik beschreibt ein regulärer Ausdruck dabei nur die Syntax eines Wortes und kann nichts über dessen Semantik aussagen. Mit regulären Ausdrücken können nicht alle Sprachen beschrieben werden, die mit einer formalen Grammatik beschrieben werden können.
Der wichtigste Unterschied zu einer formalen Grammatik ist: eine formale Grammatik gibt Regeln zum Erzeugen eines Wortes an, ein regulärer Ausdruck dient nur der Überprüfung. Ob ein Wort einem regulären Ausdruck entspricht, kann dabei wesentlich schneller überprüft werden, als ob das Wort den Regeln einer Grammatik entspricht.
Syntaxelemente
Schreibweise | Bedeutung | Beispielwörter |
(abc|def)
|
abc oder def
|
abc , def
|
[abcde]
|
a , b , c , d oder e
|
a , b , e
|
[0-9]
|
eine Ziffer von 0 bis 9
|
1 , 5 , 8
|
[k-r]
|
ein Buchstabe von k bis r
|
l , o , q
|
[A-Za-z]
|
ein Groß- oder ein Kleinbuchstabe | D , z , P
|
[^abcde]
|
alles außer a , b , c , d und e
|
g , 6 , !
|
a*
|
beliebig viele a (auch keines!)
|
aaaaaa , , a
|
a+
|
beliebig viele a (mindestens eines!) – entspricht aa*
|
a , aaa , aaaaaaa
|
abc*
|
ab und dann beliebig viele c
|
ab , abccc , abccccc
|
(abc)*
|
beliebig viele abc
|
abc , abcabcabc ,
|
def?
|
de und dann ein f oder nicht
|
de , def
|
[a-z]{5}
|
fünf Kleinbuchstaben | hallo , alles , roger
|
a{4,7}
|
mindestens 4 und höchstens 7 a
|
aaaa , aaaaa , aaaaaaa
|
^abc
|
abc am Anfang der Zeile
|
|
def$
|
def am Ende der Zeile
|
|
.
|
ein beliebiges Zeichen | z , 7 , §
|
\? , \. , \* , \[ , \] usw.
|
Diese Zeichen haben eine Funktion. Um nach den Zeichen selbst suchen zu können, muss der \ davorgesetzt werden.
|
Beispiele
Autokennzeichen
[A-ZÄÖÜ]{1,3}-[A-Z]{1,2} [0-9]{1,4}[HE]?
Teil | Erläuterung | Beispiele |
---|---|---|
[A-ZÄÖÜ]{1,3}
|
Ein bis drei Großbuchstaben inkl. Umlaute | NMS , RD , KI , PLÖ
|
-
|
Ein Bindestrich | -
|
[A-Z]{1,2}
|
Ein bis zwei Großbuchstaben ohne Umlaute | EL , WI , TK , P
|
Ein Leerzeichen | ||
[0-9]{1,4}
|
Eine bis vier Ziffern | 1313 , 1921 , 480
|
[HE]?
|
Ein H (für Oldtimer), ein E (für Elektro-Autos) oder gar nichts
|
H , E ,
|
Beispiele für das Gesamtergebnis: NMS-KG 123
oder PLÖ-RX 42E
Beachte: Es wird nur die Syntax, d.h. der grundlegende Aufbau der Zeichenkette überprüft, aber nicht, ob es sich dabei wirklich um ein reales Kennzeichen handelt. Ä-A 0
wäre zum Beispiel kein gültiges Kennzeichen (keine Stadt und kein Kreis gibt Ä-Kennzeichen aus; 0 ist als Zahl nicht zugelassen), entspricht aber dem regulären Ausdruck.
Dateinamen von Bilddateien
.+\.(jpe?g|png|gif)
Teil | Erläuterung | Beispiele |
---|---|---|
.+
|
beliebig viele beliebige Zeichen | Shruggie , BlueJ Objektinspektor
|
\.
|
Ein Punkt. Beachte: . ist irgendein Zeichen, \. ist nur der Punkt
|
.
|
(jpe?g|png|gif)
|
Entweder jpg , jpeg , png oder gif
|
jpg , jpeg , png , gif
|
Beispiele für das Gesamtergebnis: Shruggie.jpeg
, BlueJ Objektinspektor.png
Suchen und Ersetzen
Eines der Hauptanwendungsgebiete für reguläre Ausdrücke ist das Suchen und Ersetzen von Zeichenketten.
Beim Ersetzen ist folgende Funktion hilfreich: alle Teile des regulären Such-Ausdrucks, die in runden Klammern stehen, können beim Ersetzen wiederverwendet werden. Diese werden durchnummeriert und können, je nach verwendetem Programm, mit \1
, \2
, \3
usw. oder mit $1
, $2
, $3
usw. eingebaut werden. Mit \0
bzw. $0
kann außerdem auf den ganzen bei der Suche gefundenen Text Bezug genommen werden.
Beispiel
In einem Ordner sind Fotos aus zwei Quellen. Die einen sind nur mit Datum und Uhrzeit des Aufnahmezeitpunktes benannt, die anderen tragen zusätzlich das Präfix IMG_
. Nun kann man einfach nach Dateien namens IMG_(.*)
suchen und sie in \1
umbenennen.
Hier passiert im Einzelnen Folgendes:
IMG_20160401_165826.jpg
wird als zum MusterIMG_(.*)
passend erkannt.- Die Referenz
\0
wird aufIMG_20160401_165826.jpg
gesetzt und\1
auf20160401_165826.jpg
- Die Umbenennung kann erfolgen