MYSQL-reguläre Ausdrücke (REGEXP) mit Syntax und Beispielen
Was sind reguläre Ausdrücke?
Reguläre Ausdrücke helfen bei der Suche nach Daten, die komplexen Kriterien entsprechen. Wir haben uns im vorherigen Tutorial Platzhalter angesehen. Wenn Sie schon einmal mit Platzhaltern gearbeitet haben, fragen Sie sich vielleicht, warum Sie reguläre Ausdrücke lernen sollten, wenn Sie mit Platzhaltern ähnliche Ergebnisse erzielen können. Denn im Vergleich zu Platzhaltern ermöglichen uns reguläre Ausdrücke die Suche nach Daten, die noch komplexeren Kriterien entsprechen.
Grundlegende Syntax
Die grundlegende Syntax für einen regulären Ausdruck lautet wie folgt
SELECT statements... WHERE fieldname REGEXP 'pattern';
HIER -
- „SELECT-Anweisungen…“ ist der Standard SELECT-Anweisung
- „WHERE Feldname“ ist der Name der Spalte, für die der reguläre Ausdruck ausgeführt werden soll.
- „REGEXP ‚Muster‘“ REGEXP ist der reguläre Ausdrucksoperator und „Muster“ stellt das Muster dar, das mit REGEXP abgeglichen werden soll. RLIKE ist das Synonym für REGEXP und erzielt die gleichen Ergebnisse wie REGEXP. Um eine Verwechslung mit dem LIKE-Operator zu vermeiden, besser ist es, REGEXP zu verwenden stattdessen.
Schauen wir uns nun ein praktisches Beispiel an:
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Die obige Abfrage sucht nach allen Filmtiteln, die den Wortcode enthalten. Dabei spielt es keine Rolle, ob der „Code“ am Anfang, in der Mitte oder am Ende des Titels steht. Solange es im Titel enthalten ist, wird es berücksichtigt.
Nehmen wir an, wir möchten nach Filmen suchen, die mit a, b, c oder d beginnen, gefolgt von einer beliebigen Anzahl anderer Zeichen. Wie würden wir das erreichen? Wir können einen regulären Ausdruck zusammen mit den Metazeichen verwenden, um die gewünschten Ergebnisse zu erzielen.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Ausführen des obigen Skripts in MySQL Werkbank gegen myflixdb gibt uns die folgenden Ergebnisse.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
6 | Angels and Demons | NULL | 2007 | 6 |
7 | Davinci Code | NULL | 2007 | 6 |
Schauen wir uns nun unseren regulären Ausdruck, der für das obige Ergebnis verantwortlich ist, genauer an.
„^[abcd]“ bedeutet, dass der Mustervergleich am Anfang angewendet werden soll, und die Zeichenliste [abcd] bedeutet, dass in unserem Ergebnissatz nur Filmtitel zurückgegeben werden, die mit a, b, c oder d beginnen.
Lassen Sie uns unser obiges Skript ändern und die NOT-Charlist verwenden und sehen, welche Ergebnisse wir nach der Ausführung unserer Abfrage erhalten.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Ausführen des obigen Skripts in MySQL Workbench gegen myflixdb liefert uns folgende Ergebnisse.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
3 | X-Men | 2008 | ||
9 | Honey mooners | John Schultz | 2005 | 8 |
16 | 67% Guilty | 2012 | ||
17 | The Great Dictator | Chalie Chaplie | 1920 | 7 |
18 | sample movie | Anonymous | 8 | |
19 | movie 3 | John Brown | 1920 | 8 |
Schauen wir uns nun unseren regulären Ausdruck genauer an, der für die obigen Ergebnisse verantwortlich ist.
„^[^abcd]“ bedeutet, dass der Mustervergleich am Anfang angewendet werden soll, und die Zeichenliste [^abcd] bedeutet, dass Filmtitel, die mit einem der eingeschlossenen Zeichen beginnen, aus der Ergebnismenge ausgeschlossen werden.
Metazeichen für reguläre Ausdrücke
Was wir im obigen Beispiel betrachtet haben, ist die einfachste Form eines regulären Ausdrucks. Schauen wir uns nun fortgeschrittenere Musterübereinstimmungen für reguläre Ausdrücke an. Angenommen, wir möchten nur mithilfe eines regulären Ausdrucks nach Filmtiteln suchen, die mit dem Muster „Code“ beginnen. Wie würden wir dabei vorgehen? Die Antwort sind Metazeichen. Sie ermöglichen uns die Feinabstimmung unserer Mustersuchergebnisse mithilfe regulärer Ausdrücke.
Saibling | Beschreibung | Beispiel | |
---|---|---|---|
* | Der Sternchen (*) Metazeichen wird verwendet, um null (0) oder mehr Instanzen der vorangehenden Zeichenfolgen abzugleichen | SELECT * FROM movies WHERE title REGEXP 'da*'; gibt alle Filme an, die das Zeichen „da“ enthalten. Zum Beispiel „Da Vinci Code“, „Daddy's Little Girls“. | |
+ | Der plus (+) Metazeichen wird verwendet, um eine oder mehrere Instanzen von Zeichenfolgen davor abzugleichen. | SELECT * FROM `movies` WHERE `title` REGEXP 'mon+'; gibt allen Filmen, die die Charaktere „mon“ enthalten, z. B. „Engel und Dämonen“. | |
? | Die Frage(?) Metazeichen wird verwendet, um null (0) oder eine Instanz der vorangehenden Zeichenfolgen abzugleichen. | SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; gibt alle Kategorien an, die die Zeichenfolge com enthalten. Zum Beispiel Komödie, romantische Komödie. | |
. | Der Punkt (.) Metazeichen wird verwendet, um jedes einzelne Zeichen mit Ausnahme einer neuen Zeile abzugleichen. | SELECT * FROM movies WHERE `year_released` REGEXP '200.'; gibt alle in den Jahren veröffentlichten Filme an, beginnend mit den Zeichen „200“, gefolgt von einem einzelnen Zeichen. Zum Beispiel 2005,2007,2008, XNUMX, XNUMX usw. | |
[ABC] | Der Charlist [abc] wird verwendet, um mit einem der eingeschlossenen Zeichen übereinzustimmen. | SELECT * FROM `movies` WHERE `title` REGEXP '[vwxyz]'; gibt alle Filme an, die ein einzelnes Zeichen in „vwxyz“ enthalten. Zum Beispiel X-Men, Da Vinci Code usw. | |
[^ abc] | Der charlist [^abc] wird verwendet, um alle Zeichen außer den eingeschlossenen zu finden. | SELECT * FROM `movies` WHERE `title` REGEXP '^[^vwxyz]'; gibt alle Filme an, die andere Charaktere als die in „vwxyz“ enthalten. | |
[AZ] | Der [AZ] wird verwendet, um alle Großbuchstaben abzugleichen. | SELECT * FROM `members` WHERE `postal_address` REGEXP '[AZ]'; gibt alle Mitglieder an, deren Postanschrift ein beliebiges Zeichen von A bis Z enthält. Zum Beispiel Janet Jones mit der Mitgliedsnummer 1. | |
[az] | Der [az] wird verwendet, um alle Kleinbuchstaben abzugleichen | SELECT * FROM `members` WHERE `postal_address` REGEXP '[az]'; gibt alle Mitglieder an, deren Postanschriften ein beliebiges Zeichen von a bis z enthalten. .Zum Beispiel Janet Jones mit Mitgliedsnummer 1. | |
[0-9] | Der [0-9] wird verwendet, um jede Ziffer von 0 bis 9 abzugleichen. | SELECT * FROM `members` WHERE `contact_number` REGEXP '[0-9]' Gibt alle von Mitgliedern übermittelten Kontaktnummern an, die die Zeichen „[0-9]“ enthalten. Beispiel: Robert Phil. | |
^ | Der Caretzeichen (^) wird verwendet, um das Spiel von vorne zu starten. | SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]'; Gibt alle Filme an, deren Titel mit einem der Zeichen in „cd“ beginnt. Zum Beispiel Code Name Black, Daddy's Little Girls und Da Vinci Code. | |
| | Der vertikaler Balken (|) wird verwendet, um Alternativen zu isolieren. | SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]|^[u]'; gibt alle Filme an, deren Titel mit einem der Buchstaben „cd“ oder „u“ beginnt. Zum Beispiel Code Name Black, Daddy's Little Girl, Da Vinci Code und Underworld – Awakening. | |
[[:<:]] | Der[[:<:]] entspricht dem Wortanfang. | SELECT * FROM `movies` WHERE `title` REGEXP '[[:<:]]for';
gibt alle Filme an, deren Titel mit den Charakteren beginnen. Zum Beispiel: Sarah Marshal vergessen. |
|
[[:>:]] | Der [[:>:]] entspricht dem Ende von Wörtern. | SELECT * FROM `movies` WHERE `title` REGEXP 'ack[[:>:]]';
Gibt alle Filme an, deren Titel mit den Zeichen „ack“ enden. .Zum Beispiel Codename Schwarz. |
|
[:Klasse:] | Der [:Klasse:] entspricht einer Zeichenklasse, z
[:Alpha:] um Buchstaben zuzuordnen, [:Platz:] passend zum Leerraum, [:punkt:] ist passende Satzzeichen und [:upper:] für Buchstaben der oberen Klasse. |
SELECT * FROM `movies` WHERE `title` REGEXP '[:alpha:]';
Gibt alle Filme an, deren Titel nur Buchstaben enthalten .Zum Beispiel Sarah Marshal, X-Men usw. vergessen. Filme wie Fluch der Karibik 4 werden bei dieser Abfrage weggelassen. |
Der Backslash (\) wird als Escape-Zeichen verwendet. Wenn wir ihn als Teil des Musters in einem regulären Ausdruck verwenden möchten, sollten wir doppelte Backslashs (\\) verwenden.
Zusammenfassung
- Reguläre Ausdrücke bieten einen leistungsstarken und flexiblen Mustervergleich, der uns bei der Implementierung leistungsstarker Suchdienstprogramme für unsere Datenbanksysteme helfen kann.
- REGEXP ist der Operator, der bei der Durchführung von Mustervergleichen mit regulären Ausdrücken verwendet wird. RLIKE ist das Synonym
- Reguläre Ausdrücke unterstützen eine Reihe von Metazeichen, die mehr Flexibilität und Kontrolle bei der Durchführung von Musterübereinstimmungen ermöglichen.
- Der Backslash wird in regulären Ausdrücken als Escape-Zeichen verwendet. Er wird bei der Musterübereinstimmung nur dann berücksichtigt, wenn doppelte Backslashs verwendet wurden.
- Bei regulären Ausdrücken wird die Groß-/Kleinschreibung nicht beachtet.