Regular Expressions

Aus Linupedia.org
Version vom 27. Juni 2007, 19:54 Uhr von Yehudi (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Definition

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.

Ein Beispiel

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:

:1,$s/dein/sein/g

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:

:1,$s/[Dd]och//g

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!

Der praktische Nutzen?

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.

Alle Regulären Ausdrücke auf einen Blick

^
Sucht das Muster am Zeilenanfang.
/^beginnt hier/
$
Sucht das Muster am Zeilenende.
/endet hier$/
*
Beliebig viele Auftreten des vorangegangenen Zeichens; im Beispiel suchen wir Zeilen, die mit »schon« beginnende Muster enthalten (beiliebig viele führende Leerzeichen):
/ *schon/
.
Genau ein beliebiges Zeichen.
/.och/
[]
Genau eines der eingeschlossenen Zeichen.
/[Dd]och/
[a-z]
Eines der Zeichen aus dem Bereich.
/[A-X]och/
[^]
Keines der eingeschlossenen 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 Mechanismen lassen sich schon in einem Pager wie less nachvollziehen.

Beispiel zu \(..\)

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!
Tux.png Dieser Artikel ist aus dem LinWiki (LinWiki) mit der dortigen Lizenz Attribution-Share Alike 2.5 Generic übernommen worden. Die Quelle im LinWiki unter Regular Expressions ist zum Zeitpunkt der Einfügung identisch mit dem, was in der Linupedia (dem Linux-Club Wiki) unter Regular Expressions steht. Der Artikel kann gerne überarbeitet werden. Wenn der Artikel der Quelle im Wortlaut nicht mehr entspricht, kann der Baustein entfernt werden, es muss aber die Quellenangabe unten eingefügt werden. Zudem sollte dann der Bausteine Vorlage:by-sa eingefügt werden, da der Artikel dann unter diese Lizenz fällt. Im LinWiki ist eine Liste der Autoren verfügbar.