Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-REGEXP-Beispiele

In MySQL der REGEXP -Operator wird verwendet, um festzustellen, ob eine Zeichenfolge mit einem regulären Ausdruck übereinstimmt oder nicht. Es ist ein Synonym für REGEXP_LIKE() .

Wenn die Zeichenfolge mit dem bereitgestellten regulären Ausdruck übereinstimmt, ist das Ergebnis 1 , andernfalls ist es 0 .

Syntax

Die Syntax lautet wie folgt:

expr REGEXP pat

Wobei expr ist die Eingabezeichenfolge und pat ist der reguläre Ausdruck, für den Sie die Zeichenfolge testen.

Beispiel 1 – Grundlegender regulärer Ausdruck

Der grundlegendste reguläre Ausdruck, den wir verwenden können, ist einer, der keine Sonderzeichen enthält. Hier verwenden wir nur eine Zeichenfolge. Wenn ein Teil der Eingabezeichenfolge mit dieser Zeichenfolge übereinstimmt, wird eine Übereinstimmung zurückgegeben.

SELECT 'Mais' REGEXP 'Mais' AS 'Mais', 'Eichel' REGEXP 'Mais' AS 'Eichel', 'Ecke' REGEXP 'Mais' AS 'Ecke', 'Käse' REGEXP 'Mais' AS 'Käse ';

Ergebnis:

+------+-------+--------+--------+| Mais | Eichel | Ecke | Käse |+------+-------+--------+--------+| 1 | 1 | 1 | 0 |+------+-------+--------+--------+

Beispiel 2 – Übereinstimmung mit dem Anfang einer Zeichenfolge

In diesem Beispiel gibt der reguläre Ausdruck an, dass die Zeichenfolge mit Co beginnen muss .

SELECT 'Corn' REGEXP '^Co' AS 'Corn', 'Eichel' REGEXP '^Co' AS 'Eichel', 'Cheese' REGEXP '^Co' AS 'Cheese';

Ergebnis:

+------+-------+--------+| Mais | Eichel | Käse |+------+-------+--------+| 1 | 0 | 0 |+------+-------+--------+

Beispiel 3 – Übereinstimmung mit dem Ende einer Zeichenfolge

In diesem Beispiel gibt der reguläre Ausdruck an, dass die Zeichenfolge mit rn enden muss .

SELECT 'Mais' REGEXP 'rn$' AS 'Mais', 'Eichel' REGEXP 'rn$' AS 'Eichel', 'Käse' REGEXP 'rn$' AS 'Käse';

Ergebnis:

+------+-------+--------+| Mais | Eichel | Käse |+------+-------+--------+| 1 | 1 | 0 |+------+-------+--------+

Beispiel 4 – Übereinstimmung mit einem beliebigen Zeichen

Der . Zeichen passt zu jedem Zeichen.

SELECT 'Mais' REGEXP '.' AS 'Mais', 'Käse' REGEXP '.' AS 'Käse', '' REGEXP '.' AS '';

Ergebnis:

+------+--------+---+| Mais | Käse | |+------+--------+---+| 1 | 1 | 0 |+------+--------+---+

Dieses Zeichen wird typischerweise in Verbindung mit anderen Zeichen verwendet, um weitere Kriterien anzugeben. Zum Beispiel:

SELECT 'Corn' REGEXP '^C.rn$' AS 'Corn', 'Crn' REGEXP '^C.rn$' AS 'Crn';

Ergebnis:

+------+-----+| Mais | Crn |+------+-----+| 1 | 0 |+------+-----+

Hier legen wir fest, dass der String mit C beginnen muss , dass ihm ein beliebiges Zeichen folgen muss und dass es mit rn enden muss .

Beachten Sie, dass dieses Zeichen eine einzelne Instanz des Zeichens angibt. Wenn Sie mehrere Instanzen angeben möchten (zum Beispiel ee statt nur e ), müssen Sie weitere . hinzufügen Zeichen.

SELECT 'Tweet' REGEXP '^Tw..t$' AS 'Tweet', 'Tweat' REGEXP '^Tw..t$' AS 'Tweat', 'Tweet' REGEXP '^Tw.t$' AS 'Tweet', 'Twit' REGEXP '^Tw..t$' AS 'Twit';

Ergebnis:

+-------+-------+-------+------+| Twittern | Tweat | Twittern | Twit |+-------+-------+-------+------+| 1 | 1 | 0 | 0 |+-------+-------+-------+------+

Eine andere Möglichkeit besteht darin, die Anzahl der Vorkommen in geschweiften Klammern anzugeben:

SELECT 'Tweet' REGEXP '^Tw.{2}t$' AS 'Tweet', 'Tweat' REGEXP '^Tw.{2}t$' AS 'Tweat', 'Tweet' REGEXP '^Tw. {1}t$' AS 'Tweet', 'Twit' REGEXP '^Tw.{2}t$' AS 'Twit';

Ergebnis:

+-------+-------+-------+------+| Twittern | Tweat | Twittern | Twit |+-------+-------+-------+------+| 1 | 1 | 0 | 0 |+-------+-------+-------+------+

Wenn Sie jedoch das gesuchte Zeichen kennen, können Sie dieses Zeichen angeben (anstelle von . Zeichen), wie im folgenden Beispiel gezeigt.

Beispiel 5 – Übereinstimmung mit null oder mehr Instanzen eines bestimmten Zeichens

Wir können Folgendes tun, um null oder mehr Instanzen von e anzugeben Zeichen:

SELECT 'Twet' REGEXP '^Twe*t$' AS 'Twet', 'Tweet' REGEXP '^Twe*t$' AS 'Tweet', 'Tweeet' REGEXP '^Twe*t$' AS 'Tweeet ', 'Twt' REGEXP '^Twe*t$' AS 'Twt', 'Twit' REGEXP '^Twe*t$' AS 'Twit', 'Twiet' REGEXP '^Twe*t$' AS 'Twiet', 'Tweit' REGEXP '^Twe*t$' AS 'Tweit';

Ergebnis:

+------+-------+--------+-----+------+-------+- ------+| Twittern | Twittern | Twittern | Twt | Twitter | Tweet | Tweit |+------+-------+--------+-----+------+-------+-- -----+| 1 | 1 | 1 | 1 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+

Die ersten vier passen, aber die letzten drei nicht.

Beispiel 6 – Finden Sie eine oder mehrere Instanzen eines bestimmten Charakters

Wir können das vorherige Beispiel so ändern, dass wir nur dann eine Übereinstimmung erhalten, wenn eine oder mehr Zeichen gefunden werden (das vorherige Beispiel hat eine Übereinstimmung zurückgegeben, wenn Null oder mehr gefunden wurden). Dazu verwenden wir einfach + statt * :

SELECT 'Twet' REGEXP '^Twe+t$' AS 'Twet', 'Tweet' REGEXP '^Twe+t$' AS 'Tweet', 'Tweet' REGEXP '^Twe+t$' AS 'Tweeet ', 'Twt' REGEXP '^Twe+t$' AS 'Twt', 'Twit' REGEXP '^Twe+t$' AS 'Twit', 'Twiet' REGEXP '^Twe+t$' AS 'Twiet', 'Tweit' REGEXP '^Twe+t$' AS 'Tweit';

Ergebnis:

+------+-------+--------+-----+------+-------+- ------+| Twittern | Twittern | Twittern | Twt | Twitter | Tweet | Tweit |+------+-------+--------+-----+------+-------+-- -----+| 1 | 1 | 1 | 0 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+

In diesem Fall gibt das vierte Wort ein anderes Ergebnis als im vorherigen Beispiel zurück.

Beispiel 7 – Übereinstimmung mit null oder einer Instanz eines bestimmten Zeichens

Wir können das vorherige Beispiel so modifizieren, dass wir nur eine Übereinstimmung mit null oder einem der gewünschten Zeichen erhalten. Dazu verwenden wir ? :

SELECT 'Twet' REGEXP '^Twe?t$' AS 'Twet', 'Tweet' REGEXP '^Twe?t$' AS 'Tweet', 'Tweet' REGEXP '^Twe?t$' AS 'Tweeet ', 'Twt' REGEXP '^Twe?t$' AS 'Twt', 'Twit' REGEXP '^Twe?t$' AS 'Twit', 'Twiet' REGEXP '^Twe?t$' AS 'Twiet', 'Tweit' REGEXP '^Twe?t$' AS 'Tweit';

Ergebnis:

+------+-------+--------+-----+------+-------+- ------+| Twittern | Twittern | Twittern | Twt | Twitter | Tweet | Tweit |+------+-------+--------+-----+------+-------+-- -----+| 1 | 0 | 0 | 1 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+

Beispiel 8 – Wechsel

Sie können den | verwenden Zeichen, um der einen oder anderen Zeichenfolge zu entsprechen:

SELECT 'Tweet' REGEXP 'Tw|et' AS 'Tweet', 'For Let' REGEXP 'Tw|et' AS 'For Let', 'Banana' REGEXP 'Tw|et' AS 'Banana'; 

Ergebnis:

+-------+---------+--------+| Twittern | Für Let | Banane |+-------+---------+--------+| 1 | 1 | 0 |+-------+---------+--------+

Hier ist ein weiteres Beispiel, wo ich nach ganzen Wörtern suche:

SELECT 'Katze' REGEXP 'Katze|Hund' AS 'Katze', 'Hund' REGEXP 'Katze|Hund' AS 'Hund', 'Hund' REGEXP 'Katze|Hund' AS 'Hund', 'Banane' REGEXP 'Katze|Hund' AS 'Banane';

Ergebnis:

+-----+-----+---------+--------+| Katze | Hund | Verdammt | Banane |+-----+-----+---------+--------+| 1 | 1 | 1 | 0 |+-----+-----+---------+--------+

Wir erhalten immer noch eine Übereinstimmung, selbst wenn unser regulärer Ausdruck nur mit einem Teil der Zeichenfolge übereinstimmt.

Beispiel 9 – Übereinstimmung mit null oder mehr Instanzen einer Sequenz

Sie können Klammern zusammen mit dem Sternchen ()* verwenden um null oder mehr Instanzen einer Sequenz anzugeben:

SELECT 'Banana' REGEXP '(an)*' AS 'Banana', 'Land' REGEXP '(an)*' AS 'Land', 'Cheese' REGEXP '(an)*' AS 'Cheese';

Ergebnis:

+--------+------+--------+| Banane | Land | Käse |+--------+------+--------+| 1 | 1 | 1 |+--------+------+--------+

Ein weiteres Beispiel:

SELECT 'Banana' REGEXP '^B(an)*d$' AS 'Banana', 'Band' REGEXP '^B(an)*d$' AS 'Band', 'Bald' REGEXP '^B( an)*d$' AS 'Bald', 'Bad' REGEXP '^B(an)*d$' AS 'Bad';

Ergebnis:

+--------+------+------+-----+| Banane | Band | Glatze | Schlecht |+--------+------+------+-----+| 0 | 1 | 0 | 0 |+--------+------+------+-----+

Beispiel 10 – Wiederholung

Wie in einem vorherigen Beispiel gezeigt, können Sie geschweifte Klammern verwenden, um Wiederholungen anzugeben. Diese Notation bietet eine allgemeinere Art, reguläre Ausdrücke zu schreiben, als einige der vorherigen Beispiele:

SELECT 'Tweeet' REGEXP 'e{3}' AS 'Tweeet', 'Tweet' REGEXP 'e{3}' AS 'Tweet';

Ergebnis:

+--------+-------+| Twittern | Tweet |+--------+-------+| 1 | 0 |+--------+-------+

Beispiel 11 – Reichweite

Sie können den Bindestrich verwenden, um einen Bereich anzugeben. Hier ist ein Beispiel, das einen Zahlenbereich angibt:

SELECT 'Tweet 123' REGEXP '[0-9]' AS 'Tweet 123', 'Tweet ABC' REGEXP '[0-9]' AS 'Tweet ABC';

Ergebnis:

+--------+-------+| Twittern | Tweet |+--------+-------+| 1 | 0 |+--------+-------+

Und das folgende Beispiel gibt einen Bereich von Buchstaben an:

SELECT 'Tweet 123' REGEXP '[A-Z]' AS 'Tweet 123', 'ABC' REGEXP '[A-Z]' AS 'ABC', '123' REGEXP '[A-Z]' AS '123'; 

Ergebnis:

+--------+-------+| Twittern | Tweet |+--------+-------+| 1 | 0 |+--------+-------+

Folgendes passiert, wenn wir den Zahlenbereich begrenzen:

SELECT '123' REGEXP '[1-3]' AS '123', '012' REGEXP '[1-3]' AS '012', '045' REGEXP '[1-3]' AS '045 ';

Ergebnis:

+-----+-----+-----+| 123 | 012 | 045 |+-----+-----+-----+| 1 | 1 | 0 |+-----+-----+-----+

Beispiel 12 – Nicht innerhalb eines Bereichs

Wir können den ^ verwenden Zeichen, um das vorherige Beispiel so zu ändern, dass der angegebene Zeichenbereich ausgeschlossen wird:

SELECT '123' REGEXP '[^1-3]' AS '123', '012' REGEXP '[^1-3]' AS '012', '045' REGEXP '[^1-3]' AS '045';

Ergebnis:

+-----+-----+-----+| 123 | 012 | 045 |+-----+-----+-----+| 0 | 1 | 1 |+-----+-----+-----+

Wir erhalten also das gegenteilige Ergebnis zum vorherigen Beispiel.