Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
know-how<br />
Reguläre Ausdrücke<br />
Erste Schritte mit Regular Expressions<br />
Schnipseljagd<br />
Computer erleichtern die Arbeit – man muss ihnen eben nur genau sagen, was sie tun<br />
sollen. Mit sogenannten regulären Ausdrücken beschleunigen Sie das Suchen <strong>und</strong> Ersetzen<br />
von Zeichenketten in Textdateien auf elegante Art. Frank Hofmann<br />
© Maurus, 123RF<br />
Beispiele <strong>und</strong> Skripte<br />
LU/regex/<br />
README<br />
Der Umgang mit regulären<br />
Ausdrücken ähnelt<br />
zunächst dem Erlernen<br />
<strong>und</strong> Anwenden einer<br />
neuen Sprache. Haben<br />
Sie jedoch die einzelnen<br />
Symbole <strong>und</strong> die Grammatik<br />
verinnerlicht,<br />
meis tern Sie auch anspruchsvollere<br />
Situationen<br />
mit komplizierten<br />
Textstrukturen schnell.<br />
Dieser Artikel zeigt, wie<br />
sich das Konzept der<br />
Regular Expressions im<br />
Arbeitsalltag bewährt.<br />
REguläRE AusDRückE foRMuliEREn<br />
Bei der Formulierung regulärer Ausdrücke<br />
gilt es, generell zwei Punkte zu<br />
beachten: Erstens hilft es, wenn das<br />
Encoding für die Textdaten identisch<br />
mit dem des Regex ist. Anderenfalls<br />
müssen Sie Umlaute <strong>und</strong> Sonderzeichen<br />
im regulären Ausdruck für das<br />
Encoding der Textdaten anpassen.<br />
Der zweite Punkt betrifft die Eigenheiten<br />
der Regex-Implementierung in<br />
der gewählten Programmiersprache:<br />
Nicht alle Sprachen unterstützen den<br />
POSIX-Standard vollständig <strong>und</strong> definieren<br />
eigene Steuerzeichen.<br />
Neben dem Übertragen <strong>und</strong> Darstellen<br />
von Daten zählt das Suchen<br />
<strong>und</strong> Ersetzen in Textstrukturen<br />
<strong>und</strong> Zeichenketten zu den<br />
häufigsten Aktionen beim Umgang<br />
mit dem Computer. Bei<br />
Letzterem helfen die sogenannten<br />
regulären Ausdrücke (engl.:<br />
„regular expressions“). Deren<br />
Konzept umfasst einen komplexen<br />
Text- <strong>und</strong> Zeichenfilter, der<br />
ein effektives Suchen <strong>und</strong> Ersetzen<br />
in Zeichenketten jeglicher<br />
Form ermöglicht – etwa bei<br />
Strings in Programmiersprachen,<br />
in Ergebnissen von Datenbankabfragen<br />
<strong>und</strong> in Dokumenten als<br />
Dateien auf einem Datenträger.<br />
Es spielt dabei keine Rolle, ob<br />
die Textdaten strukturiert vorliegen<br />
oder nicht – über Erfolg oder<br />
Misserfolg entscheidet nur die<br />
richtige Formulierung des regulären<br />
Ausdrucks (kurz auch Regex<br />
oder RE genannt). Allerdings fällt<br />
bei strukturierten Dokumentformaten<br />
wie CSV, HTML, XML,<br />
XSLT <strong>und</strong> LaTeX der Einsatz der<br />
REs meist leichter. Das Regex-<br />
Konzept ist weitverbreitet <strong>und</strong><br />
zeichnet sich durch sehr hohe<br />
Stabilität aus. Für die Programmiersprachen<br />
Java, Perl, Python,<br />
PHP, Ruby, das .NET-Framework<br />
<strong>und</strong> für die Bash gehört es zum<br />
Standardumfang.<br />
Die Beschreibung der gesuchten<br />
(Zeichen-)Muster folgt bestimmten<br />
syntaktischen Regeln, auch<br />
Grammatik genannt. Ein Programm<br />
wertet diese Grammatik<br />
aus <strong>und</strong> wendet sie auf eine Menge<br />
von Zeichen an. Der Rückgabewert<br />
umfasst eine Untermenge<br />
von Zeichen oder eine Trefferliste.<br />
Gibt es keine Übereinstimmung,<br />
bleibt diese Liste leer.<br />
Gr<strong>und</strong>lagen<br />
Sicherlich haben Sie schon einmal<br />
nach einer Person mit einem Namen<br />
gesucht, den es in unterschiedlich<br />
geschriebenen, aber<br />
phonetisch identischen Varianten<br />
gibt – etwa nach einem Meier,<br />
Schmidt oder Schulze [1]. Die folgenden<br />
Beispiele erläutern den<br />
Regex-Einsatz anhand dieses<br />
Prob lems. Als Adressbuch dient<br />
dabei eine Textdatei, in der Kommas<br />
die einzelnen Felder der Einträge<br />
trennen (Listing 1). Als<br />
Suchwerkzeug für die Kommandozeile<br />
kommt grep zum Einsatz.<br />
Um Herrn Meier im Adressbuch<br />
zu finden, geben Sie Grep zwei<br />
Parameter mit: den Namen als<br />
Suchmuster <strong>und</strong> unser Adressbuch<br />
als Datei, in der Grep nach-<br />
84 09 | 11<br />
www.linux-user.de