Reguläre Ausdrücke?
Mit regulären ausdrücke beschreibt man suchmuster. Wozu das gut sein kann, sieht man am schnellsten durch ein relativ einfaches beispiel. Angenommen wir schreiben einen text und vergessen dabei gelegentlich den satzanfang groß zu schreiben. Dies wollen wir durch ein NEdit Skript automatisch korrigieren lassen. Leicht abgekürzt lautet der entscheidende teil dieses skripts
- start= search("[\\.!:\\?] \\l+", $cursor, "backward", "regex")
- if ($cursor == $search_end)
- { Korrigiere erstes Wort und gebe ein Leerzeichen ein }
- else insert_string(" ")
Die erste zeile sucht von der cursor position aus zurück nach dem regular expression oder muster (pattern) [\.!:\?] \l+ . (Die zusätzlichen backslashes sind nur wegen der C spracheigenheit in zeichenketten notwendig.) Das muster besteht aus einer zeichenkette, die mit einem zeichen, das in den rechteckigen klammern gelistet ist, also mit einem punkt, ausrufezeichen, doppelpunkt oder fragezeichen, beginnt. (Backslash vor punkt und fragezeichen bedeutet, lese die zeichen wörtlich, sonst hätten diese eine andere bedeutung.) Danach folgt ein leerzeichen und schließlich eine variable(!) anzahl von buchstaben (\l steht für buchstaben und + bedeutet mindestens einen und möglichst viele). Die ausführung des skripts wird and die leertaste gebunden.
Also, wir schreiben z.B. Satzende. hallo und drücken die leertaste. Dann wir das skript ausgeführt und findet die zeichenkette . hallo. Die endposition der kette stimmt mit der cursor position überein, also wird der if-block ausgeführt, hallo korrigiert (das ist kein problem, da wir den anfang der kette in der variablen start haben) und anschließend wird ein leerzeichen eingegeben. Wir schreiben weiter Satzende. Hallo Welt. und drücken die leertaste. Das skript findet die zeichenkette . Hallo und nicht etwa . Hallo Welt, denn nach Hallo kommt ein Leerzeichen und das ist kein Buchstabe. Diesmal stimmt die cursor position nicht mit dem ende der zeichenkette überein, da wir uns nicht am satzanfang befinden, der if-block wird nicht ausgeführt und es wird nur ein leerzeichen hinter Welt. eingefügt.
Ohne reguläre ausdrücke könnte man selbst
dieses einfache beispiel nur umständlich realisieren und komplexere
aufgaben gar nicht. Die anwendungen sind so zahlreich, das ich mir
editoren, die reguläre ausdrücke nicht ausreichend unterstützen, nicht mehr anschaue.
NEdit benutzt reguläre ausdrücke auch zum Syntax Highlighting. Hierbei werden nicht
nur einzelne schlüsselwörter
wie if oder else
farblich markiert, sondern es ist
möglich geklammerte ausdrücke zu kennzeichnen
und innerhalb dieser ausdrücke dann wieder befehle
oder schlüsselwörter zu markieren.
Speziell bei LaTeX
dateien führt dies dazu, daß man keine klammern
mehr vergißt, weil man direkt an der färbung
sieht, hier stimmt etwas nicht. Damit schließt man schon beim schreiben einen häufigen
und unangenehmen fehler aus, denn bei fehlenden klammern liefert der
TeX compiler
leider meist keine hilfreichen fehlermeldungen.
