Ein regulärer Ausdruck ist nichts anderes als ein Suchmuster, um übereinstimmende Muster in einer Eingabe zu finden.
Einfache reguläre Ausdrücke sind uns sicher schon begegnet, ohne es bewusst wahr genommen zu haben. Zum Beispiel
bei der Suche nach einem Zeichenmuster text
im Editor vi
(mit /text
).
Bleiben wir beim Beispiel des vi
und schauen uns weitere Möglichkeiten regulärer Ausdrücke anhand eines Verses
von Eugen Roth an:
Übelkeit
|
Aus irgendeinem Grund möchten wir im Text nun "dein" durch "sein" ersetzen, im Kommandomodus des
vi
geben wir folgende Zeile ein
:1,$s/dein/sein/g
|
und erhalten:
Übelkeit
|
Jetzt stört uns plötzlich das Wort "doch" und wir möchten beide Auftreten entfernen, also geben wir
:1,$s/[Dd]och//g
|
ein und erzielen:
Übelkeit
|
Wozu man das braucht? Naja, stellt Euch vor, auch Ihr schreibt eine Einführung über irgendetwas. Und auch Ihr veröffentlicht das Ganze in den zwei Formaten HTML und Postscript. Ihr schreibt auch noch in Deutsch und müsst im LaTeX jedes 'ü' durch '"u' ausdrücken, jeden 'ö' durch '"s' usw. Vielleicht macht Ihr Euch die Arbeit, im HTML die Umlaute durch den Unicode auszudrücken... Dann könntet Ihr 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:
Zeichen | Bedeutung | Beispiel |
^ |
Muster am Zeilenanfang suchen | /^beginnt/ |
$ |
Muster am Zeilenende suchen | /endet hier$/ |
* |
Beliebig viele Auftreten des vorangegangenen Zeichens | / *schon/ |
. |
Genau ein beliebiges Zeichen | /.och/ |
[] |
Eines der Zeichen | /[Dd]och/ |
[x-y] |
Eines der Zeichen aus dem Bereich | /[A-X]och/ |
[^] |
Keines der Zeichen | /[^ln]och/ |
\ |
Sperrt die Sonderbedeutung des nachfolgenden Zeichens | /x\$\>y/ |
\< |
Muster am Wortanfang suchen | /\<doch/ |
\> |
Muster am Wortende suchen | /ung\>/ |
\(..)\ |
Eingeschlossenes Muster vormerken; auf dieses kann später über \1 zugegriffen werden. Bis zu neun
Muster können auf diese Weise gespeichert werden (Beispiel). |
/\(aff\)ig \1enstark/ |
x\{m\} |
m -faches Auftreten des Zeichens x |
/s\{3\}/ |
x\{m,n\} |
mindestens m -, maximal n -maliges Auftreten des Zeichens x |
/+\{5,8\}/ |
Zwar vermag nicht jedes der nachstehenden Tools mit jedem der Ausdrücke etwas anzufangen, aber die meisten Mechnismen lassen sich schon in
einem Pager wie less
nach vollziehen.
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!
|
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!
|