manual.de_Regexp.html
MySQL-Referenzhandbuch für Version 4.1.1-alpha - G Beschreibung der MySQL-Syntax für reguläre Ausdrücke
Go to the first, previous, next, last section, table of contents.
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
-
-
Es gibt eine allgemeinere Schreibweise für regexps, die mit vielen
Vorkommen des vorherigen Atoms übereinstimmen.
a*
-
Kann als
a geschrieben werden.
a+
-
Kann als
a geschrieben werden.
a?
-
Kann als
a 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.
|