Ein regulärer Ausdruck ist nichts anderes als ein Suchmuster, um
übereinstimmende Muster in einer Eingabe zu finden.
In der theoretischen Informatik wird der Begriff des regulären Ausdrucks im
Zusammenhang mit endlichen Automaten in einer anderen Terminologie verwendet.
Einfache reguläre Ausdrücke sind Ihnen sicher schon begegnet, ohne dass Sie
es bewusst wahr genommen haben. Zum Beispiel bei der Suche nach einem Zeichenmuster
»Text« im Editor vi (mit
»/Text«).
Bleiben wir beim Beispiel des vi und betrachten weitere Möglichkeiten
»regulärer Ausdrücke« anhand eines Verses von Eugen Roth:
Übelkeit
Du magst der Welt oft lange trotzen,
Dann spürst du doch: es ist zum ---.
Doch auch wenn deine Seele bricht,
Beschmutze deinen Nächsten nicht!
|
Aus irgend einem Grund sei der Ersatz aller Textpassagen »dein« durch
»sein« erwünscht. Im Kommandomodus des vi
verrichtet folgende Zeile Suche und Ersatz:
Als Ergebnis erhalten wir:
Übelkeit
Du magst der Welt oft lange trotzen,
Dann spürst du doch: es ist zum ---.
Doch auch wenn seine Seele bricht,
Beschmutze seinen Nächsten nicht!
|
Ein »statischer« Text ist ein einfacher Spezialfall eines regulären
Ausdrucks. Erst unser nächstes Ansinnen, beide Auftreten des Worts
»doch« zu streichen, lässt die Flexibilität des Konzepts
erahnen:
Als Text erzielen wir:
Übelkeit
Du magst der Welt oft lange trotzen,
Dann spürst du : es ist zum ---.
auch wenn seine Seele bricht,
Beschmutze seinen Nächsten nicht!
|
Stellen Sie sich vor, auch Sie schreiben eine Einführung über irgendetwas.
Und auch Sie veröffentlichen das Ganze in den zwei Formaten HTML und Postscript. Sie
schreiben auch noch in Deutsch und müssen in LaTeX jedes 'ü' durch '"u'
ausdrücken, jeden 'ö' durch '"o' usw. Vielleicht machen Sie sich die Arbeit, in
HTML die Umlaute durch den Unicode auszudrücken... Dann könnten Sie alles per
Hand anpassen, oder das Ganze durch ein paar wenige Zeilen regulärer Ausdrücke
erledigen.
Bevor wir uns den einzelnen Werkzeugen zuwenden, sollen alle regulären
Ausdrücke tabellarisch zusammen gefasst werden.
^ |
|
Sucht das Muster am Zeilenanfang.
|
$ |
|
Sucht das Muster am Zeilenende.
|
* |
|
Beliebig viele Auftreten des vorangegangenen Zeichens; im Beispiel
suchen wir Zeilen, die mit »schon« beginnende Muster enthalten
(beiliebig viele führende Leerzeichen):
|
. |
|
Genau ein beliebiges Zeichen.
|
[] |
|
Genau eines der eingeschlossenen Zeichen.
|
[a-z] |
|
Eines der Zeichen aus dem Bereich.
|
[^] |
|
Keines der eingeschlossenen Zeichen.
|
\ |
|
Sperrt die Sonderbedeutung des nachfolgenden Zeichens.
|
\< |
|
Muster am Wortanfang suchen.
|
\> |
|
Muster am Wortende suchen.
|
\(..\) |
|
Eingeschlossenes Muster vormerken; auf dieses kann später über
\1 zugegriffen werden. Bis zu neun Muster können auf diese Weise
gespeichert werden (Beispiel).
|
x\{m\} |
|
m-faches Auftreten des Zeichens x.
|
x\{m,n\} |
|
Mindestens m-, maximal n-maliges Auftreten des Zeichens
x
|
Zwar vermag nicht jedes der nachstehenden Tools mit jedem der Ausdrücke etwas
anzufangen, aber die meisten Mechanismen lassen sich schon in einem Pager wie less
nachvollziehen.
In einem Leserbrief an eine beliebige Zeitung verwenden wir mehrfach die Redewendung
»Herren und Damen«. Später wird uns bewusst, dass wir die guten Manieren etwas
vernachlässigt hatten und wollen die Ansprache nun in »Damen und Herren«
ändern:
Meine Herren und Damen!
...
bitte ich die Herren und Damen, sich mit den Mechanismen der regulären
Ausdrücke vertraut zu machen.
...
Ich danke Ihnen, meine Herren und Damen! |
Im Vi erledigt eine einzige Zeile die Arbeit:
:1,$s/\(Herren\) \(und\) \(Damen\)/\3 \2 \1/g |
Die drei uns interessierenden Muster merken wir uns vor, und greifen während der
Ersetzung in umgekehrter Reihenfolge auf diese zu.
Meine Damen und Herren!
...
bitte ich die Damen und Herren, sich mit den Mechanismen der regulären
Ausdrücke vertraut zu machen.
...
Ich danke Ihnen, meine Damen und Herren! |
|