Reguläre Ausdrücke werden verwendet, um in einem Text nach Stellen zu suchen, die zu einem vorgegebenen Muster passen. Ein regulärer Ausdruck steht für eine Menge von Zeichenketten. Von jeder Zeichenkette in dieser Menge sagt man, dass sie zu dem regulären Ausdruck passt. Ein oder mehrere reguläre Ausdrücke bilden ein Muster.
Ein regulärer Ausdruck besteht aus einer Folge von Zeichen. Bei diesen Zeichen unterscheidet man
einfache Zeichen und
Sonderzeichen.
Einfache Zeichen sind alle Zeichen im Zeichensatz außer dem Neue-Zeile-Zeichen und den Sonderzeichen. Einfache Zeichen in einem Muster stehen für sich selbst, z.B. passen zu dem Muster abc nur diejenigen Zeichenketten, in denen die Folge abc an irgendeiner Stelle enthalten ist.
Sonderzeichen stehen nicht für sich selbst, sondern haben eine besondere Bedeutung. Diese ist unten erläutert.
Man unterscheidet zwei Arten regulärer Ausdrücke:
einfache reguläre Ausdrücke
erweiterte reguläre Ausdrücke
Wie die verschiedenen Arten regulärer Ausdrücke gebildet werden, wird in den folgenden Abschnitten beschrieben.
Die folgende Tabelle gibt einen Überblick darüber, welche Kommandos reguläre Ausdrücke verarbeiten:
Kommando | Art der regulären Ausdrücke |
awk | erweiterte |
ed | einfache |
egrep | erweiterte |
ex | *) |
expr | einfache |
grep | einfache |
lex | erweiterte |
nl | einfache |
sed | einfache |
vi | *) |
*)
Die Kommandos ex und vi verarbeiten reguläre Ausdrücke, die von den einfachen regulären Ausdrücken in einigen Punkten abweichen. Dies ist bei ex und vi beschrieben.
Einfache reguläre Ausdrücke
Einfache reguläre Ausdrücke werden wie folgt gebildet:
Nr. | regulärer | Bedeutung | Beispiel | passende |
1 | c | Das Zeichen c, wobei c kein | a | a |
2 | \c | Das Zeichen c, wobei c jedes Zeichen | \a | a |
3 | . | Ein beliebiges Zeichen. | . | a, x, *, ... |
4 | [s] | Eines der Zeichen, die in der Zeichenkette | [mz] | m, z |
5 | [^s] | Eines der Zeichen, die nicht in der | [^xyz] | jedes Zeichen |
6 | r* | Null-, ein- oder mehrmals der reguläre | a* | nichts, a, aa, aaa, ... |
7 | r\{m,n\} | Mindestens m- und höchstens n-mal der | a\{1,2\} | a oder aa |
8 | rx | (Verkettung) Aufeinanderfolge einer | [ab]. | ax, a3, a*, bz, ... |
9 | ^r | Eine zum regulären Ausdruck r passende | ^[aA]pfel | apfel oder Apfel am |
10 | r$ | Eine zum regulären Ausdruck r passende | [bB]irne$ | birne oder Birne am |
11 | \(r\) | Zeichenketten, die zum regulären | \([aA]pfel\) | apfel, Apfel |
12 | \n | n ist eine ganze Zahl von 1 bis 9. Kommt | \(a\(b\)\)\2 | abb |
Priorität
Die folgende Tabelle zeigt die Priorität der Operatoren in regulären Ausdrücken.
Operator | Priorität |
[. .] [= =] [: :] | höchste Priorität |
\<zeichen> | . |
[ ] | . |
( ) | . |
* ? + \ {m,n\ } | . |
Verkettung | . |
^ $ | . |
| | niedrigste Priorität |
Sonderzeichen
Sonderzeichen | Das linksstehende Zeichen ist ein Sonderzeichen, wenn ... |
\ | ihm kein Gegenschrägstrich \ vorangestellt ist. |
. | ihm kein Gegenschrägstrich \ vorangestellt ist und |
* | ihm kein Gegenschrägstrich \ vorangestellt ist, |
$ | es das letzte Zeichen eines Musters ist. |
^ | es das erste Zeichen eines Musters ist oder |
- | es in eckigen Klammern steht, aber nicht an erster oder letzter Stelle. |
Begrenzungszeichen | ihm kein Gegenschrägstrich \ vorangestellt ist. |
[. | Die linksstehenden Zeichenpaare sind Sonderzeichen, wenn sie innerhalb |
Erweiterte reguläre Ausdrücke
Erweiterte reguläre Ausdrücke umfassen die einfachen regulären Ausdrücke mit folgender Ausnahme:
Die bei einfachen regulären Ausdrücken verwendete Konstruktion \(...\) hat bei erweiterten regulären Ausdrücken keine Sonderbedeutung, z.B. steht der erweiterte reguläre Ausdruck \(ab\) für die Zeichenkette (ab).
Darüberhinaus bieten erweiterte reguläre Ausdrücke die folgenden zusätzlichen Syntaxelemente zur Bildung von Mustern:
Nr. | regulärer | Bedeutung | Beispiel | passende |
7 | r{m,n} | Mindestens m- und höchstens n-mal | a{1,2} | a oder aa |
13 | r+ | Ein- oder mehrmals der reguläre | u+ | u, uu, |
14 | r? | Null- oder einmal der reguläre | u? | nichts oder u |
15 | (r) | Zeichenketten, die zu dem regulären | (ok(abc)) | okabc |
16 | (r1/r2) | Zeichenketten, die zu dem regulären | (ok?ko) | ok oder ko |
Priorität
Die folgende Tabelle zeigt die Priorität der Operatoren in erweiterten regulären Ausdrücken.
Operator | Priorität |
[. .] [= =] [: :] | höchste Priorität |
\<zeichen> | . |
[ ] | . |
( ) | . |
* ? + {m,n} | . |
Verkettung | . |
^ $ | . |
| | niedrigste Priorität |
Beispiele
Einfache reguläre Ausdrücke
Muster
Bedeutung
passende Zeichenketten
ab.d
a - b - ein beliebiges Zeichen - d
abcd, abXd, ab*d, ...
ab.*d
a - b - beliebige Zeichenkette (kann auch leer
sein) - dabd, abxd, abX*Yd, ...
ab[xyz]d
a - b - entweder x oder y oder z - d
abxd, abyd, abzd
ab[^c]d
a - b - beliebiges Zeichen ungleich c - d
abbd, abXd, ab*d, ...
^abcd$
eine Zeile, die nur die Zeichenkette abcd enthält
Erweiterte reguläre Ausdsrücke
Muster
Bedeutung
passende Zeichenketten
ab.+d
a - b - beliebige Zeichenkette aus einem oder
mehreren Zeichen - dabjd, abX*Yd, ...
abc?d
a - b - c oder nichts - d
abd, abcd
(abc|xyz)
abc oder xyz
abc, xyz