Suchen und Ersetzen in anderen Sprachen
(Auszug aus "Reguläre Ausdrücke" von Jeffrey E. F. Friedl)
Wir betrachten in diesem Abschnitt kurz ein paar andere Sprachen und Werkzeuge, die seit langer Zeit reguläre Ausdrücke unterstützen.
Awk
In awk wird der integrierte Ansatz verwendet. Mit /regex/ wird eine Regex auf die aktuelle Eingabezeile angewendet und mit »var ~ ...« auf andere Daten. Sie sehen, woher die Perl-Notation für die Mustersuche kommt (den Substitutionsoperator dagegen hat Perl von sed geerbt). Die Originalversion von awk hatte keinen Substitutionsoperator, neuere Versionen haben die sub(...)-Funktion:
sub(/Rechtsschreib/, "Rechtschreib")
Das wendet die Regex ˹Rechtsschreib˼ auf die aktuelle Zeile an und ersetzt den ersten Treffer durch Rechtschreib. Das Äquivalent in Perl oder sed wäre s/Rechtsschreib/Rechtschreib/.
Wenn alle möglichen Treffer ersetzt werden sollen, verwendet man bei awk nicht eine Option oder einen Modifikator, sondern eine andere Funktion: gsub(/Standart/, "Standard").
Tcl
In Tcl wird ein prozeduraler Ansatz verwendet, der für denjenigen verwirrend aussieht, der die Quoting-Konventionen von Tcl nicht kennt. Unsere Rechtschreibkorrektur sieht in Tcl so aus:
regsub Rechtsschreib $var Rechtschreib newvar
Damit wird der Suchstring, der Inhalt der Variablen var, mit der Regex ˹Rechtsschreib˼ abgesucht. Der erste Treffer – wenn es einen gibt – wird durch Rechtschreib ersetzt, und der neue String, ob verändert oder nicht, wird in der Variablen newvar gespeichert (die in diesem Fall ohne Dollarzeichen geschrieben wird). Tcl erwartet bei der regsub-Funktion als ersten Parameter die Regex, an zweiter Stelle den Suchstring, an dritter den Ersatztext und an vierter Stelle die Variable, die den veränderten String aufnehmen soll. Man kann bei regsub Optionen angeben, beispielsweise mit -all alle Treffer ersetzen, nicht nur den ersten.
regsub -all Rechtsschreib $var Rechtschreib newvar
Mit der Option -nocase kann man ungeachtet der Groß- und Kleinschreibung suchen, ganz analog zur -i-Option bei egrep oder dem /i-Modifikator bei Perl.
GNU Emacs
GNU Emacs (den wir ab hier nur noch »Emacs« nennen) ist ein überaus mächtiger Texteditor mit einer eingebauten Programmiersprache, elisp (Emacs Lisp). Emacs hat eine prozedurale Regex-Schnittstelle mit zahlreichen Funktionen. Eine der wichtigsten ist re-search-forward, die einen normalen String als Parameter erwartet und diesen als regulären Ausdruck interpretiert. Emacs sucht dann von der »aktuellen Position« aus im Text nach einem Treffer und bleibt dort stehen, oder er bricht ab, wenn kein Treffer gefunden wird. (re-search-forward wird aufgerufen, wenn man beim Editieren die »regexp search«-Funktion benutzt.)
Wie aus der Tabelle Summarischer Überblick über die Regex-Dialekte einiger Programme ersichtlich ist, gibt es im Regex-Dialekt von Emacs jede Menge Backslashes. Zum Beispiel ist ˹\<\([a-z]+\)\([\n●\t]\|<[^>]+>\)+\1\>˼ eine Regex zum Finden von verdoppelten Wörtern, ganz ähnlich wie die aus Einführung in reguläre Ausdrücke. Wir können diese Regex aber nicht direkt einsetzen, weil die Regex-Maschine von Emacs die Zeichen \t und \n nicht versteht. In Emacs sind das String-Metazeichen, und deshalb müssen wir die Regex in Anführungszeichen angeben. Der String-Parser übersetzt diese Metazeichen in wirkliche Tabs und Newlines und gibt das Resultat an die Regex-Maschine weiter. Es hat Vorteile, wenn man reguläre Ausdrücke in dieser Art in Stringform verarbeiten kann, aber auch Nachteile: Da in elisp an sich schon genügend Backslashes benutzt werden, sieht das Resultat oft aus wie ein Haufen verstreuter Zahnstocher. Hier ist eine kleine Funktion, die nach verdoppelten Wörtern sucht:
(defun FindNextDbl ()
"Zum nächsten verdoppelten Wort gehen. <...>-Tags werden ignoriert." (interactive)
(re-search-forward "\\<\\([a-z]+\\)\\([\n \t]\\|<[^>]+>\\)+\\1\\>")
)
Mit (define-key global-map "\C-x\C-d"flFindNextDbl) wird diese Funktion mit der Tastensequenz »Strg-x Strg-d« verbunden. Damit kann man beim Editieren schnell nach dem nächsten verdoppelten Wort suchen.
<< zurück | vor >> |
Tipp der data2type-Redaktion: Zum Thema Reguläre Ausdrücke bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |
Copyright der deutschen Ausgabe © 2008 by O’Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Reguläre Ausdrücke" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
O’Reilly Verlag GmbH & Co. KG, Balthasarstr. 81, 50670 Köln