Reguläre Ausdrücke in MySQL (Reguläre Ausdrücke in MySQL), Lektion, Seite 722966
https://www.purl.org/stefan_ram/pub/regulaere_ausdruecke_mysql (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

Mustersuchen in MySQL 

Vorbereitung

Skript (MySQL )

WARNINGS; SET sql_mode = 'ANSI,TRADITIONAL';
DROP SCHEMA IF EXISTS S; CREATE SCHEMA S; USE S;

CREATE TABLE PLANET ( PLANET VARCHAR( 255 ) PRIMARY KEY, NAME VARCHAR( 255 ));
INSERT INTO PLANET( PLANET, NAME )VALUES( '10', 'Mars' );
INSERT INTO PLANET( PLANET, NAME )VALUES( '2', 'Venus' );
INSERT INTO PLANET( PLANET, NAME )VALUES( '3', 'Erde' );
INSERT INTO PLANET( PLANET, NAME )VALUES( '1', 'Merkur' );

SELECT * FROM PLANET;

Mustersuchen

Im folgenden werden einige der wichtigsten Möglichkeiten von REGEXP-Textsuchen beispielhaft herausgegriffen. Die Möglichkeiten werden hier aber keinesfalls erschöpfend beschrieben.

Die Mustersuche mit »REGEXP« steht in der hier vorgestellten Form nicht in allen Datenbanken zur Verfügung. Sie ist eine mächtigere Alternative zu »LIKE«.

Der Operator »REGEXP« sucht im Text links von »REGEXP« (im linken Operanden) nach dem Text rechts von »REGEXP« (nach dem rechten Operanden). Groß- und Kleinschreibung wird nicht unterschieden.

Der Wert des Operatorausdrucks ist ein Wahrheitswert, der nicht 0 ist, wenn der Text gefunden wurde.

SELECT 'Alpha' REGEXP 'alpha';
+------------------------+
| 'Alpha' REGEXP 'alpha' |
+------------------------+
| 1 |
+------------------------+
SELECT NAME FROM PLANET WHERE NAME REGEXP 'MARS';
+------+
| NAME |
+------+
| Mars |
+------+
SELECT NAME FROM PLANET WHERE NAME REGEXP 'RS';
+------+
| NAME |
+------+
| Mars |
+------+

Zur Unterscheidung von Groß- und Kleinschreibung kann »BINARY« verwendet werden.

SELECT 'Alpha' REGEXP BINARY 'alpha';
+-------------------------------+
| 'Alpha' REGEXP BINARY 'alpha' |
+-------------------------------+
| 0 |
+-------------------------------+
SELECT NAME FROM PLANET WHERE NAME REGEXP BINARY 'MARS';
Empty set

Der Punkt steht für ein beliebiges Zeichen (außer einem Zeilenende)

SELECT 'Alpha' REGEXP BINARY 'Alp.a';
+-------------------------------+
| 'Alpha' REGEXP BINARY 'Alp.a' |
+-------------------------------+
| 1 |
+-------------------------------+
SELECT NAME FROM PLANET WHERE NAME REGEXP 'M.RS';
+------+
| NAME |
+------+
| Mars |
+------+

Der Stern kennzeichnet Wiederholung des direkt vor ihm stehenden Elements (hier »a«). Die Wiederholung darf beliebig oft, auch nullmal, erfolgen!

SELECT 'Aaaaa' REGEXP BINARY 'Aa*';
+-------------------------------------+
| SELECT 'Aaaaa' REGEXP BINARY 'Aa*'; |
+-------------------------------------+
| 1 |
+-------------------------------------+
SELECT NAME FROM PLANET WHERE NAME REGEXP 'Ma*';
+--------+
| NAME |
+--------+
| Merkur |
| Mars |
+--------+

Untermuster können eingeklammert werden. Dies ändert nichts an ihrer Bedeutung.

SELECT 'abc' REGEXP BINARY 'a(b)c';
+-----------------------------+
| 'abc' REGEXP BINARY 'a(b)c' |
+-----------------------------+
| 1 |
+-----------------------------+
SELECT NAME FROM PLANET WHERE NAME REGEXP 'M(A)R';
+------+
| NAME |
+------+
| Mars |
+------+

Alternativen werden mit dem senkrechten Strich getrennt („ ‚b‘ oder ‚x‘ “).

SELECT 'abc' REGEXP BINARY 'a(b|x)c';
+-------------------------------+
| 'abc' REGEXP BINARY 'a(b|x)c' |
+-------------------------------+
| 1 |
+-------------------------------+
SELECT NAME FROM PLANET WHERE NAME REGEXP 'M(A|E)';
+--------+
| NAME |
+--------+
| Merkur |
| Mars |
+--------+
SELECT NAME FROM PLANET WHERE NAME REGEXP 'MA|E';
+--------+
| NAME |
+--------+
| Merkur |
| Mars |
| Venus |
| Erde |
+--------+

Zeichenmengen werden in eckigen Klammern angegeben („ ‚B‘ oder ‚b‘ “, „von ‚a‘ bis ‚e‘ “).

SELECT 'abc' REGEXP BINARY 'a[Bb][a-e]';
+----------------------------------+
| 'abc' REGEXP BINARY 'a[Bb][a-e]' |
+----------------------------------+
| 1 |
+----------------------------------+
SELECT NAME FROM PLANET WHERE NAME REGEXP 'M[A-E]';
+--------+
| NAME |
+--------+
| Merkur |
| Mars |
+--------+
SELECT NAME FROM PLANET WHERE NAME REGEXP 'M[A-D]';
+--------+
| NAME |
+--------+
| Mars |
+--------+

Normalerweise reicht es, daß das Muster irgendwo  im Text vorkommt

SELECT 'axc' REGEXP BINARY 'x';
+-------------------------+
| 'axc' REGEXP BINARY 'x' |
+-------------------------+
| 1 |
+-------------------------+

Ein Zirkumflex steht für den Textanfang (»^a« ist ein „a“ direkt nach dem Textanfang).

SELECT 'axc' REGEXP BINARY '^a';
+--------------------------+
| 'axc' REGEXP BINARY '^a' |
+--------------------------+
| 1 |
+--------------------------+
SELECT NAME FROM PLANET WHERE NAME REGEXP 'E';
+--------+
| NAME |
+--------+
| Merkur |
| Venus |
| Erde |
+--------+
SELECT NAME FROM PLANET WHERE NAME REGEXP '^E';
+--------+
| NAME |
+--------+
| Erde |
+--------+

Ein Dollarzeichen steht für das Textende (»c$« ist ein „c“ direkt vor dem Textende).

SELECT 'axc' REGEXP BINARY 'c$';
+--------------------------+
| 'axc' REGEXP BINARY 'c$' |
+--------------------------+
| 1 |
+--------------------------+
SELECT NAME FROM PLANET WHERE NAME REGEXP 'R';
+--------+
| NAME |
+--------+
| Merkur |
| Mars |
| Erde |
+--------+
SELECT NAME FROM PLANET WHERE NAME REGEXP 'R$';
+--------+
| NAME |
+--------+
| Merkur |
+--------+
SELECT NAME FROM PLANET WHERE NAME REGEXP '^MARS$';
+--------+
| NAME |
+--------+
| Mars |
+--------+
SELECT NAME FROM PLANET WHERE NAME REGEXP '^(MARS|VENUS)$';
+--------+
| NAME |
+--------+
| Mars |
| Venus |
+--------+
SELECT NAME FROM PLANET WHERE NAME REGEXP '^M[A-S]*$';
+--------+
| NAME |
+--------+
| Mars |
+--------+
SELECT NAME FROM PLANET WHERE NAME REGEXP '^[A-V]*S$';
+--------+
| NAME |
+--------+
| Mars |
| Venus |
+--------+

Soundex *

»string SOUNDEX( string s )« Klassifikation nach dem Klang.

»int DIFFERENCE( string s, string t )« Abstand nach dem Klang (4 ist gute Übereinstimmung, 0 schlechte).

Das SOUNDEX -System ist möglicherweise an die englische Sprache angepaßt und für andere Sprachen nur bedingt geeignet.

ALTER TABLE COUNTRY ADD SOUND VARCHAR ( 4 ) NOT NULL;

UPDATE COUNTRY SET SOUND = LEFT( SOUND( NAME ), 4 );

SELECT * FROM COUNTRY WHERE SOUNDEX=LEFT( SOUNDEX( 'example' ), 4 );

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722966 stefan_ram:722966 Reguläre Ausdrücke in MySQL Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722966, slrprddef722966, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/regulaere_ausdruecke_mysql