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 B 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):
^
mysql> select "fo\nfo" REGEXP "^fo$"; -> 0 mysql> select "fofo" REGEXP "^fo"; -> 1
$
mysql> select "fo\no" REGEXP "^fo\no$"; -> 1 mysql> select "fo\no" REGEXP "^fo$"; -> 0
.
mysql> select "fofo" REGEXP "^f.*"; -> 1 mysql> select "fo\nfo" REGEXP "^f.*"; -> 1
a*
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+
a
-Zeichen überein.
mysql> select "Ban" REGEXP "^Ba+n"; -> 1 mysql> select "Bn" REGEXP "^Ba+n"; -> 0
a?
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
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)*
abc
überein.
mysql> select "pi" REGEXP "^(pi)*$"; -> 1 mysql> select "pip" REGEXP "^(pi)*$"; -> 0 mysql> select "pipi" REGEXP "^(pi)*$"; -> 1
{1}
{2,3}
a*
a{0,}
geschrieben werden.
a+
a{1,}
geschrieben werden.
a?
a{0,1}
geschrieben werden.
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]
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.]]
ch
-Vereinigungselement enthält, stimmt der reguläre Ausdruck
[[.ch.]]*c
mit den ersten fünf Zeichen von chchcc
überein.
[=zeichen_klasse=]
o
und (+)
die Mitglieder einer
Äquivalenzklasse sind, sind [[=o=]]
, [[=(+)=]]
und
[o(+)]
allesamt Synonyme. Eine Äquivalenzklasse darf kein Endpunkt
eines Bereichs sein.
[:zeichen_klasse:]
[:
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 | xdigit |
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
[[:<:]]
[[:>:]]
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.