Go to the first, previous, next, last section, table of contents.


G Beschreibung der MySQL-Syntax für reguläre Ausdrücke

Ein regulärer Ausdruck (regex) ist eine mächtige Möglichkeit, eine komplexe Suche zu formulieren.

MySQL benutzt Henry Spencers Implementation regulärer Ausdrücke, die anstrebt, POSIX-1003.2-konform zu sein. MySQL benutzt die erweiterte Version.

Die vorliegende vereinfachte Referenz überspringt die Details. Um genauere Informationen zu erhalten, sehen Sie sich Henry Spencers regex(7)-Handbuchseite an, die in der Quelldistribution enthalten ist. See section C Danksagungen.

Ein regulärer Ausdruck beschreibt einen Satz von Zeichenketten. Der einfachste regexp ist einer, der keine Sonderzeichen enthält. Der regexp hello beispielsweise stimmt mit hello und sonst nichts überein.

Nicht triviale reguläre Ausdrücke benutzen bestimmte spezielle Konstrukte, so dass sie mit mehr als einer Zeichenkette übereinstimmen können. Der regexp hallo|stefan beispielsweise stimmt entweder mit der Zeichenkette hallo oder der Zeichenkette stefan überein.

Um ein komplexeres Beispiel zu geben, stimmt der regexp B[an]*s mit jeder der Zeichenketten Bananas, Baaaaas, Bs und jeder anderen Zeichenkette überein, die mit einem B anfängt, mit einem s aufhört und jede beliebige Anzahl von a- oder n-Zeichen dazwischen enthält.

Ein regulärer Ausdruck kann jedes der folgenden Sonderzeichen bzw. Konstrukte benutzen (0 = keine Übereinstimmung):

^
Stimmt mit dem Anfang einer Zeichenkette überein.
mysql> select "fo\nfo" REGEXP "^fo$";           -> 0
mysql> select "fofo" REGEXP "^fo";              -> 1
$
Stimmt mit dem Ende einer Zeichenkette überein.
mysql> select "fo\no" REGEXP "^fo\no$";         -> 1
mysql> select "fo\no" REGEXP "^fo$";            -> 0
.
Stimmt mit jedem Zeichen überein (inklusive neue Zeile).
mysql> select "fofo" REGEXP "^f.*";             -> 1
mysql> select "fo\nfo" REGEXP "^f.*";           -> 1
a*
Stimmt mit jeder Folge von 0 oder mehr a-Zeichen überein.
mysql> select "Ban" REGEXP "^Ba*n";             -> 1
mysql> select "Baaan" REGEXP "^Ba*n";           -> 1
mysql> select "Bn" REGEXP "^Ba*n";              -> 1
a+
Stimmt mit jeder Folge von einem oder mehr a-Zeichen überein.
mysql> select "Ban" REGEXP "^Ba+n";             -> 1
mysql> select "Bn" REGEXP "^Ba+n";              -> 0
a?
Stimmt mit 0 oder einem a-Zeichen überein.
mysql> select "Bn" REGEXP "^Ba?n";              -> 1
mysql> select "Ban" REGEXP "^Ba?n";             -> 1
mysql> select "Baan" REGEXP "^Ba?n";            -> 0
de|abc
Stimmt mit den Zeichenfolgen de oder abc überein.
mysql> select "pi" REGEXP "pi|apa";             -> 1
mysql> select "axe" REGEXP "pi|apa";            -> 0
mysql> select "apa" REGEXP "pi|apa";            -> 1
mysql> select "apa" REGEXP "^(pi|apa)$";        -> 1
mysql> select "pi" REGEXP "^(pi|apa)$";         -> 1
mysql> select "pix" REGEXP "^(pi|apa)$";        -> 0
(abc)*
Stimmt mit 0 oder mehr Instanzen der Folge abc überein.
mysql> select "pi" REGEXP "^(pi)*$";            -> 1
mysql> select "pip" REGEXP "^(pi)*$";           -> 0
mysql> select "pipi" REGEXP "^(pi)*$";          -> 1
{1}
{2,3}
Es gibt eine allgemeinere Schreibweise für regexps, die mit vielen Vorkommen des vorherigen Atoms übereinstimmen.
a*
Kann als a{0,} geschrieben werden.
a+
Kann als a{1,} geschrieben werden.
a?
Kann als a{0,1} geschrieben werden.
Um genauer zu sein, stimmt ein Atom, gefolgt von einer Begrenzung, die eine Ganzzahl i und keine Kommas enthält, mit einer Folge von genau i Übereinstimmungen des Atoms überein. Ein Atom gefolgt von einer Begrenzung, die eine Ganzzahl i und ein Komma enthält, stimmt mit einer Folge von i oder mehr Übereinstimmungen des Atoms überein. Ein Atom, gefolgt von einer Begrenzung, die zwei Ganzzahlen i und j Übereinstimmungen enthält, stimmt mit einer Folge von i bis j (inklusive) Übereinstimmungen des Atoms überein. Beide Argumente müssen im Bereich von 0 bis RE_DUP_MAX (Vorgabe 255) inklusive sein. Wenn es zwei Argumente gibt, muss das zweite größer oder gleich dem ersten sein.
[a-dX]
[^a-dX]
Stimmt mit jedem Zeichen überein, was entweder a, b, c, d oder X ist (oder nicht ist, wenn ^ benutzt wird). Um ein literales ]-Zeichen einzuschließen, muss es unmittelbar der öffnenden Klammer [ folgen. Um ein literales --Zeichen einzuschließen, muss es zuerst oder zuletzt geschrieben werden. Daher stimmt [0-9] mit jeder Dezimalziffer überein. Alle Zeichen, die innerhalb eines []-Paars keine definierte Bedeutung haben, haben keine spezielle Bedeutung und stimmen nur mit sich selbst überein.
mysql> select "aXbc" REGEXP "[a-dXYZ]";         -> 1
mysql> select "aXbc" REGEXP "^[a-dXYZ]$";       -> 0
mysql> select "aXbc" REGEXP "^[a-dXYZ]+$";      -> 1
mysql> select "aXbc" REGEXP "^[^a-dXYZ]+$";     -> 0
mysql> select "gheis" REGEXP "^[^a-dXYZ]+$";    -> 1
mysql> select "gheisa" REGEXP "^[^a-dXYZ]+$";   -> 0
[[.zeichen.]]
Die Zeichenfolge des vereinigten Elements. Die Folge ist ein einzelnes Element der Ausdrucksliste in der Klammer. Ein Klammerausdruck, der ein Mehrzeichen-Vereinigungselement enthält, kann daher mit mehr als einem Zeichen übereinstimmen. Wenn die Vereinigungsfolge zum Beispiel ein ch-Vereinigungselement enthält, stimmt der reguläre Ausdruck [[.ch.]]*c mit den ersten fünf Zeichen von chchcc überein.
[=zeichen_klasse=]
Eine Äquivalenzklasse, die für Zeichenfolgen aller Vereinigungselemente dieser steht, inklusive sich selbst. Wenn zum Beispiel o und (+) die Mitglieder einer Äquivalenzklasse sind, sind [[=o=]], [[=(+)=]] und [o(+)] allesamt Synonyme. Eine Äquivalenzklasse darf kein Endpunkt eines Bereichs sein.
[:zeichen_klasse:]
Innerhalb eines Klammerausdrucks steht der Name einer Zeichenklasse, die in [: und :] eingeschlossen ist, für die Auflistung aller Zeichen, die zu dieser Klasse gehören. Standard-Zeichenklassennamen sind:
alnum digit punct
alpha graph space
empty lower upper
cntrl print xdigit
Diese stehen für die Zeichenklassen, die auf der ctype(3)-Handbuchseite definiert sind. Ein Locale darf andere zur Verfügung stellen. Eine Zeichenklasse darf nicht als Endpunkt eines Bereichs benutzt werden.
mysql> select "justalnums" REGEXP "[[:alnum:]]+";       -> 1
mysql> select "!!" REGEXP "[[:alnum:]]+";               -> 0
[[:<:]]
[[:>:]]
Diese stimmen mit der Null-Zeichenkette am Anfang bzw. am Ende eines Worts überein. Ein Wort ist definiert als Folge von Wort-Zeichen, dem weder Wortzeichen vorangestellt sind noch darauf folgen. Ein Wortzeichen ist ein alnum-Zeichen (wie in ctype(3) definiert) oder ein Unterstrich (_).
mysql> select "a word a" REGEXP "[[:<:]]word[[:>:]]";      -> 1
mysql> select "a xword a" REGEXP "[[:<:]]word[[:>:]]";     -> 0
mysql> select "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -> 1


Go to the first, previous, next, last section, table of contents.