24.03.2014 Aufrufe

LinuxUser CLOUD - Online-Storage und Social Networks (Vorschau)

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!