Reguläre Ausdrücke (Regex)
Mit Regulären Ausdrücken (engl. ‘regular expression’ oder abgekürzt ‘regex’) wird eine Sprache bezeichnet, mit welcher Muster formuliert werden können, um in Texten bestimmte Zeichenfolgen zu finden. Passt ein regulärer Ausdruck zu einer Zeichenkette in einem Text, spricht man von einem Match (von engl. ‘to match’, passen).
Reguläre Ausdrücke sind bei uns nur am Rande ein Thema (im Zusammenhang mit OpenType-Features). Diese Seite musst du nur lesen, wenn es dich wirklich interessiert.
Beispiele
Jedes Wort kann als regulärer Ausdruck verwendet werden, «matcht» aber nur sich selbst: Hund
matcht die Zeichenfolge «Hund».
Mit runden Klammern und dem senkrechten Strich können entweder/oder-Muster formuliert werden: (Hund|Katze)
matcht sowohl «Hund» als auch «Katze».
Ein Fragezeichen symbolisiert ein optionales Zeichen: Hunde?
matcht «Hund» und «Hunde». (Hunde?|Katzen?)
matcht «Hund», «Hunde», «Katze» und «Katzen».
Ein Punkt steht für ein beliebiges Zeichen: P.ng
matcht «Ping», «Pong» und «Peng» (aber auch «Pxng» und anderen Nonsens).
Ein Plus steht für ein oder mehrere Zeichen: Tu+t
matcht «Tut», «Tuut», «Tuuuuuuuuuuuuuut» etc.
Dazu gibt es viele weitere Elemente, z.B. Meta Characters wie \w
(ein Buchstabe, eine Ziffer oder ein Unterstrich), \d
(eine Zahl), ^
der Beginn eines Absatzes oder sein Ende: $
.
Die grosse Barriere
Auf den ersten Blick sehen reguläre Ausdrücke abschreckend aus: [A-ZÄÖÜ]{2,}(?!\d)
sieht aus, als hätte sich eine Katze (oder ein Hund) auf die Tastatur gesetzt, Lust auf mehr macht das nicht.
Nutzen
Reguläre Ausdrücke sind ein internationaler Standard und werden von unterschiedlichster Software unterstützt, z.B. InDesign, Text-Editoren wie VS Code, dem OS-X Terminal und allen modernen Programmiersprachen.
Und so sind Zeichen wie \w
.
und +
Werkzeuge, mit denen du reguläre Ausdrücke formulieren kannst, um Texte nach Zeichenketten zu durchforsten, die ähnlich aber nie gleich aussehen. Zum Beispiel E-Mail Adressen, Telefonnummern, Abkürzungen, Verweise auf Gesetzesparagraphen, Texte in Anführungszeichen, überschüssige Leerzeichen und vieles mehr.
Du kannst sie unter anderem verwenden, um OpenType-Features zu aktivieren oder um Ersetzungen zu machen. Reguläre Ausdrücke lassen sich in Reingewinn umrechnen, weil sie zu deutlich kürzeren Arbeitszeiten führen können.
Ersetzungen mit Backreferences
Ein starkes Werkzeug sind Backreferences, das sind Kürzel, mit denen du Teile eines Matches wiederverwenden kannst.
Als Beispiel kannst du dir eine Liste mit Namen vorstellen:
Meier, Anna
Huber, Odette
Arnold, Hans
Nüssli, Frieda
Moser, Max
Stell dir vor, Es sind über Tausend Namen aufgelistet und du musst sie alle in die Reihenfolge Vorname Name bringen und das Komma streichen. Ein regulärer Ausdruck, der auf all diese Zeilen passt, wäre z.B. ^[^,]+, .+$
.
^
und $
stehen für den Anfang und das Ende der Zeile. [^,]
bedeutet «alle Zeichen ausser das Komma», mit dem +
als Zusatz heisst es: «ein oder mehrere beliebige Zeichen, ausser das Komma». Damit matchen wir die Nachnamen. Dann folgt ,
, also ein Komma und ein Leerzeichen, was ein Komma und ein Leerzeichen matcht, und schliesslich ein .
d.h. ein beliebiges Zeichen, mit einem +
als Zusatz, also ein oder mehrere beliebige Zeichen.
Diesen regulären Ausdruck unterteilen wir in zwei Gruppen: ^([^,]+), (.+)$
Die Klammern haben an sich keine Bedeutung, aber ihr Inhalt lässt sich nun referenzieren: der Match der ersten Klammer mit $1
, und jener der zweiten Klammer mit $2
.
Du kannst jetzt nach dem Muster ^([^,]+), (.+)$
suchen und es durch $2 $1
ersetzen.
Was heisst «Grep»?
Grep ist der Name einer Software, die Texte auf Basis regulärer Ausdrücke filtert. Der Name leitet sich von einem Kommando ab, mit dem auf UNIX-Rechnern der 60er Jahre jene Zeilen eines Dokuments gedruckt werden konnten, in denen ein bestimmter Match gefunden wurde: g/re/p
. Das g
steht für ‘global’ (in der ganzen Datei), das re
für den regulären Ausdruck, das p
für ‘print’.
Darum heisst es in InDesign «GREP-Stil».
Links
- regular-expressions.info bietet eine umfassende Übersicht inklusive Tutorial
- Regex Tester
- In Daniel Shiffmans Youtube-Kanal ‘Coding Train’ gibt es eine Reihe von Videos zum Thema
- Auf lynda.com gibt es diverse Kurse zum Thema Grep-Stile
- Das Kapitel Regex & JavaScript im Buch «Eloquent Javascript»,
- Regex in JavaScript lernen und üben auf der Website Execute Program