Exkurs - Reguläre Ausdrücke in der Praxis
Vorbemerkung
Reguläre Ausdrücke kommen häufig in der Praxis vor. Zur Darstellung regulärer Ausdrücke werden dabei aber oft zusätzliche Metasymbole benutzt. Im Folgenden sollen gebräuchliche Schreibweisen und ihre Bedeutung anhand von Beispielen erläutert werden.
Beachte, dass es neben den hier gezeigten Schreibweisen noch weitere gibt und dass die Gesamtheit aller benutzbaren Symbole nicht einheitlich gehandhabt wird. Du musst gegebenenfalls also in einem Nachschlagewerk weitere Details nachlesen.
Zeichen und Zeichenmengen
Ein einzelnes Zeichen wie z.B. a
ist bereits ein regulärer Ausdruck.
Es beschreibt die Menge {a} bestehend aus dem einzigen Wort a.
Will man mit einem regulären Ausdruck ein Zeichen beschreiben, das auch als Metasymbol benutzt wird,
so muss man das Zeichen mit einem \
maskieren. Der reguläre Ausdruck \+
beschreibt also die Menge {+} bestehend aus dem Wort +.
Mit Hilfe eckiger Klammern kann man reguläre Ausdrücke bilden, die Zeichenmengen beschreiben.
Die einfachste Möglichkeit besteht darin, innerhalb der eckigen Klammern alle gewünschten Zeichen
aufzulisten. So beschreibt der reguläre Ausdruck [hsv]
die Menge der Ein-Zeichen-Wörter
{h, s, v}. Innerhalb der eckigen Klammern kann man auch ganze Zeichenbereiche erfassen.
Der reguläre Ausdruck [a-z]
beschreibt die Menge der Ein-Zeichen-Wörter
{a, b, ..., y, z}.
Mit dem Symbol ^
lassen sich Komplemente von Zeichenmengen bilden.
Der reguläre Ausdruck [^0-9]
beschreibt die Menge der Ein-Zeichen-Wörter, die
nicht mit einem der Zeichen aus {0, 1, ..., 8, 9} übereinstimmen.
regulärer Ausdruck | Bedeutung |
---|---|
[hsv] | {h, s, v} |
[\[x\+y\]] | {[, x, +, y, ]} |
[a-z] | {a, b, ..., y, z} |
[a-z0-9] | {a, b, ..., y, z, 0, 1, ..., 8, 9} |
[^0-9] | Z - {0, 1, ..., 8, 9}; Menge Z aller Zeichen ohne 0, ..., 9 |
Konkatenation
Reguläre Ausdrücke kann man aneinanderhängen (konkatenieren).
Wenn man zwei reguläre Ausdrücke A
und B
aneinanderhängt (konkateniert),
so entsteht hierdurch ein neuer
regulärer Ausdruck AB
, der alle Wörter beschreibt, deren Anfang zum ersten regulären Ausdruck A
passt und
deren Ende zum zweiten regulären Ausdruck B
passt. So beschreibt der reguläre Ausdruck [a-z][0-9]
die Menge aller Wörter, die mit einem Zeichen aus {a, ..., z} beginnen und mit einem Zeichen aus
{0, ..., 9} enden, also z.B. u2.
regulärer Ausdruck | Bedeutung |
---|---|
K2 | {K2} |
[a-z][0-9] | {a0, ..., a9, b0, ..., b9, ..., z0, ..., z9} |
1[0-9]1 | {101, 111, 121, 131, 141, 151, 161, 171, 181, 191} |
Iteration
Wiederholtes Aneinanderhängen regulärer Ausdrücke kann man mit den Metasymbolen *
und +
beschreiben. Ein regulärer Ausdruck der Gestalt A*
, bei dem auf einen regulären Ausdruck
A
das Metasymbol *
folgt, beschreibt all die Wörter, die durch wiederholtes
(auch keinmaliges) Aneinanderhängen von Wörtern passend zu A
entstehen.
Ein regulärer Ausdruck der Gestalt A+
beschreibt all die Wörter, die durch wiederholtes
(mindestens einmaliges) Aneinanderhängen von Wörtern passend zu A
entstehen.
So beschreibt der reguläre Ausdruck a*
die Menge {λ, a, aa, aaa, aaaa, ...}, die
auch das leere Wort λ enthält und der reguläre Ausdruck a+
die Menge {a, aa, aaa, aaaa, ...}.
regulärer Ausdruck | Bedeutung |
---|---|
a* | {λ, a, aa, aaa, aaaa, ...} |
a+ | {a, aa, aaa, aaaa, ...} |
[0-9]+ | {0, ..., 9, 00, ..., 99, 000, ..., 999, ...} |
1[01]*1 | {11, 101, 111, 1001, 1011, 1101, 1111, 10001, ...} |
Option
Mit Hilfe des Metasymbols ?
kann man optionales Vorkommen (d.h. einmaliges oder keinmaliges Vorkommen)
von Wörtern beschreiben.
Ein regulärer Ausdruck der Gestalt A?
beschreibt alle Wörter aus A
und zusätzlich das leere Wort λ.
regulärer Ausdruck | Bedeutung |
---|---|
b? | {λ, b} |
ab?c | {ac, abc} |
[\+\-]?[0-9]+ | {0, +0, -0, 1, +1, -1, ...} |
Alternative
Eine Alternative wird mit Hilfe des Metasymbols |
beschrieben.
Wenn man zwei reguläre Ausdrücke A
und B
mit dem Metasymbol |
verknüpft,
so entsteht hierdurch ein neuer
regulärer Ausdruck A|B
, der alle Wörter beschreibt, die zum ersten regulären Ausdruck A
passen oder zum zweiten regulären Ausdruck B
passen. So beschreibt der reguläre Ausdruck
[a-c]|[0-2]
die Menge {a, b, c, 0, 1, 2} und ist also gleichbedeutend zum regulären Ausdruck
[a-c0-2]
.
regulärer Ausdruck | Bedeutung |
---|---|
a|b | {a, b} |
[a-c]|[0-2] | {a, b, c, 0, 1, 2} |
Bindungsstärke und Gruppierung
Der reguläre Ausdruck a|bc+
ist gleichbedeutend mit dem regulären Ausdruck a|(b(c+))
.
Im regulären Ausdruck a|(b(c+))
werden runde Klammern benutzt, um Zeichenfolgen zu gruppieren und
auf diese Weise die Reihenfolge der Operatorauswertung festzulegen. Im regulären Ausdruck a|bc+
wird diese Reihenfolge durch die vordefinierte Bindungsstärke der Metasymbole festgelegt:
Die Operatoren *
, +
, ?
binden stärker als
die Konkatenation, der Operator |
schwächer als
die Konkatenation.
regulärer Ausdruck | Bedeutung |
---|---|
ab+ | {ab, abb, abbbb, ...} |
(ab)+ | {ab, abab, ababab, ...} |
ab|c | {ab, c} |
a(b|c) | {ab, ac} |