Reguläre Ausdrücke
In der OpenPLZ API können Sucheingaben zu Straßennamen, Postleitzahlen oder Ortsnamen optional durch reguläre Ausdrücke definiert werden. Die OpenPLZ API unterstützt POSIX-Basisreguläre Ausdrücke (BRE).
Was sind reguläre Ausdrücke?
Reguläre Ausdrücke (englisch: Regular Expressions, oft abgekürzt als Regex) sind ein Werkzeug zur Textsuche. Sie ermöglichen es, bestimmte Muster in Zeichenketten zu suchen und zu finden. Mit regulären Ausdrücken können komplexe Suchoperationen durchgeführt werden, indem man festlegt, welche Art von Zeichen oder Textstrukturen gesucht werden sollen.
POSIX-Basisreguläre Ausdrücke
POSIX-Basisreguläre Ausdrücke (BRE) sind die traditionellere Form von regulären Ausdrücken, die in Unix-ähnlichen Betriebssystemen verwendet werden. Sie bieten eine robuste und effiziente Möglichkeit, Zeichenfolgen zu durchsuchen, abzugleichen und zu manipulieren. Im Gegensatz zu erweiterten regulären Ausdrücken (ERE) müssen viele Sonderzeichen in BRE mit einem Rückwärtsschrägstrich (\
) maskiert werden, um ihre speziellen Bedeutungen anzunehmen. Dies führt zu einigen syntaktischen Unterschieden zwischen BRE und anderen Formen regulärer Ausdrücke.
Die BRE-Syntax ist relativ minimalistisch, mit mehreren Metazeichen und Konstrukten zur Definition von Übereinstimmungsregeln. Im Folgenden werden die grundlegenden Komponenten der BRE-Syntax behandelt.
Literale Zeichen
Ein literales Zeichen ist einfach ein Zeichen, das sich selbst entspricht. Die meisten Zeichen werden als literale Zeichen behandelt, es sei denn, sie sind Metazeichen (z. B. *
, .
, ^
), die spezielle Bedeutungen haben. Um ein literales Metazeichen zu finden, musst Du es mit einem Rückwärtsschrägstrich (\
) maskieren.
Beispiel:
abc
stimmt genau mit der Zeichenfolge "abc" überein.
Metazeichen und Sonderzeichen in BRE
Startanker einer Zeile
Das Caret-Symbol ^
wird verwendet, um den Anfang einer Zeile oder Zeichenfolge abzugleichen.
Beispiel:
^abc
stimmt nur mit "abc" überein, wenn es am Anfang einer Zeile steht.
Ende einer Zeile
Das Dollarzeichen $
stimmt mit dem Ende einer Zeile oder Zeichenfolge überein.
Beispiel:
abc$
stimmt nur mit "abc" überein, wenn es am Ende einer Zeile steht.
Übereinstimmung mit einem beliebigen Zeichen
Der Punkt .
wird verwendet, um mit einem beliebigen Zeichen außer dem Zeilenumbruch übereinzustimmen.
Beispiel:
a.c
stimmt mit jeder dreistelligen Zeichenfolge überein, die mit "a" beginnt und mit "c" endet, wobei jedes beliebige Zeichen dazwischen liegt (z. B. "abc", "a5c").
0 oder mehr Wiederholungen
Das Sternchen *
stimmt mit dem vorherigen Element 0 oder mehrmals überein.
Beispiel:
ab*c
stimmt mit "ac", "abc", "abbc", "abbbc" usw. überein.
Übereinstimmung mit einem Zeichen aus einer Menge
Mit Klammerausdrücken []
(auch als Zeichenklassen bekannt) kann eine Reihe von Zeichen definiert werden, die auf eine bestimmte Position in einer Zeichenkette passen sollen.
Beispiele:
[abc]
stimmt mit "a", "b" oder "c" überein.[0-9]
stimmt mit jeder Ziffer zwischen 0 und 9 überein.
Sonderfälle bei Klammerausdrücken:
-
Ein Caret (
^
) am Anfang eines Klammerausdrucks negiert die Zeichenauswahl, was bedeutet, dass es mit jedem Zeichen außer den aufgelisteten übereinstimmt.Beispiel:
[^abc]
stimmt mit jedem Zeichen außer "a", "b" oder "c" überein.
-
Ein Bindestrich (
-
) kann verwendet werden, um einen Zeichenbereich anzugeben.Beispiel:
[a-z]
stimmt mit jedem Kleinbuchstaben überein.
Maskierungszeichen
In BRE verlieren Metazeichen wie *
, .
, ^
und $
ihre speziellen Bedeutungen, wenn sie mit einem Rückwärtsschrägstrich \
maskiert werden.
Beispiele:
\*
stimmt mit einem literalen Sternchen überein.\\
stimmt mit einem literalen Rückwärtsschrägstrich überein.
Wiederholungsoperatoren
Genau `m` Vorkommen übereinstimmen
\{m\}
stimmt mit genau m
Vorkommen des vorherigen Elements überein.
Beispiel:
a\{3\}
stimmt genau mit drei Vorkommen von "a" überein (d. h. "aaa").
Zwischen `m` und `n` Vorkommen übereinstimmen
\{m,n\}
stimmt mit zwischen m
und n
Vorkommen des vorherigen Elements überein.
Beispiel:
a\{2,4\}
stimmt mit zwischen zwei und vier Vorkommen von "a" überein (d. h. "aa", "aaa" oder "aaaa").
Mindestens `m` Vorkommen übereinstimmen
\{m,\}
stimmt mit m
oder mehr Vorkommen des vorherigen Elements überein.
Beispiel:
a\{2,\}
stimmt mit mindestens zwei Vorkommen von "a" überein (d. h. "aa", "aaa", "aaaa" usw.).
Gruppierung und Rückverweise
Gruppierung
Klammern \(
und \)
werden verwendet, um Teile des Musters zu gruppieren. Der gruppierte Teil des Musters wird als einzelnes Element behandelt.
Beispiel:
\(ab\)*
stimmt mit 0 oder mehr Vorkommen von "ab" überein.
Rückverweis
Ein Rückverweis bezieht sich auf einen zuvor gruppierten Unterausdruck. In BRE werden Rückverweise durch \n
dargestellt, wobei n
eine Zahl ist, die die n
-te Gruppe im Muster repräsentiert. Der Rückverweis stimmt mit dem gleichen Text wie die entsprechende Gruppe überein.
Beispiel:
\(abc\)\1
stimmt mit "abcabc" überein, da sich\1
auf den ersten gruppierten Ausdruck "abc" bezieht.
Anker
Anker in BRE werden verwendet, um Positionen und nicht Zeichen abzugleichen.
^
: Stimmt mit dem Anfang einer Zeile überein.$
: Stimmt mit dem Ende einer Zeile überein.
Maskierte Metazeichen
Einige der Metazeichen in BRE müssen maskiert werden, was sich von anderen regulären Ausdrucks-Syntaxen unterscheidet. Zum Beispiel:
\{
und\}
müssen maskiert werden, um Wiederholungen darzustellen.- Klammern
\(
und\)
werden zur Gruppierung verwendet.
Beispiele
Hier sind einige Beispiele, um zu demonstrieren, wie BRE in der Praxis funktioniert:
Datumsformat
Muster: \([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{4\}\)
Dieses Muster stimmt mit einem Datumsformat überein, bei dem:
- Die ersten beiden Ziffern den Tag darstellen.
- Die zweiten beiden Ziffern den Monat darstellen.
- Die letzten vier Ziffern das Jahr darstellen.
Beispiel für eine Übereinstimmung: "25092024" (steht für 25. September 2024).
Telefonnummer
Muster: \([0-9]\{3\}\)-[0-9]\{3\}-[0-9]\{4\}
Dieses Muster stimmt mit einer Telefonnummer im Format XXX-XXX-XXXX
überein, wobei X
eine Ziffer darstellt.
Beispiel für eine Übereinstimmung: "123-456-7890".
Wiederholte Wörter
Muster: \(Wort\)\1
Dieses Muster stimmt mit dem Wort "Wort" überein, das zweimal hintereinander wiederholt wird, z. B. "WortWort".