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 Wildcards angesehen. Wenn Sie bereits mit Platzhaltern gearbeitet haben, fragen Sie sich möglicherweise, warum Sie reguläre Ausdrücke lernen sollten, wenn Sie mit den Platzhaltern ähnliche Ergebnisse erzielen können. Weil reguläre Ausdrücke im Vergleich zu Platzhaltern die Suche nach Daten ermöglichen, 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 die 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 Operator für reguläre Ausdrücke und 'Muster' repräsentiert das Muster, das von REGEXP abgeglichen werden soll. RLIKE ist das Synonym für REGEXP und erzielt die gleichen Ergebnisse wie REGEXP. Um eine Verwechslung mit dem Operator LIKE zu vermeiden, ist es besser, stattdessen REGEXP zu verwenden.
Schauen wir uns nun ein praktisches Beispiel an.
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Die obige Abfrage sucht nach allen Filmtiteln, in denen der Wortcode enthalten ist. Es spielt keine Rolle, ob sich der "Code" am Anfang, in der Mitte oder am Ende des Titels befindet. 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 dies 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]';
Wenn Sie das obige Skript in der MySQL-Workbench für die myflixdb ausführen, erhalten Sie 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 an, der für das obige Ergebnis verantwortlich ist.
'[abcd]' Das Caret (^) bedeutet, dass die Musterübereinstimmung am Anfang angewendet werden soll, und die Zeichenliste [abcd] bedeutet, dass nur Filmtitel, die mit a, b, c oder d beginnen, in unserer Ergebnismenge zurückgegeben werden.
Lassen Sie uns unser obiges Skript ändern und die NOT-Zeichenliste verwenden und sehen, welche Ergebnisse wir nach Ausführung unserer Abfrage erhalten.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Wenn Sie das obige Skript in der MySQL-Workbench für die myflixdb ausführen, erhalten Sie die folgenden 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 an, der für die obigen Ergebnisse verantwortlich ist.
'[abcd]' Das Caret (^) bedeutet, dass die Musterübereinstimmung am Anfang angewendet werden soll, und die Zeichenliste [abcd] bedeutet, dass die 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 erweiterte Musterübereinstimmungen für reguläre Ausdrücke an. Angenommen, wir möchten nach Filmtiteln suchen, die mit dem Muster "Code" beginnen, wobei nur ein regulärer Ausdruck verwendet wird. Wie würden wir vorgehen? Die Antwort ist Metazeichen. Sie ermöglichen es uns, unsere Mustersuchergebnisse mithilfe regulärer Ausdrücke zu optimieren.
Verkohlen | Beschreibung | Beispiel | |
---|---|---|---|
* * | Das Sternzeichen (*) wird verwendet, um null (0) oder mehr Instanzen der vorhergehenden Zeichenfolgen abzugleichen | SELECT * FROM movies WHERE Titel REGEXP 'da *'; gibt alle Filme mit den Zeichen "da". Zum Beispiel Da Vinci Code, Daddys kleine Mädchen. | |
+ | Das Pluszeichen (+) wird verwendet, um eine oder mehrere Instanzen von Zeichenfolgen davor abzugleichen. | SELECT * FROM `movies` WHERE` title` REGEXP 'mon +'; gibt alle Filme mit Charakteren "mon". Zum Beispiel Engel und Dämonen. | |
? | Das Metazeichen frage (?) Wird verwendet, um null (0) oder eine Instanz der vorhergehenden Zeichenfolgen abzugleichen. | SELECT * FROM `category` WHERE` category_name` REGEXP 'com?'; gibt alle Kategorien an, die string com enthalten. Zum Beispiel Komödie, romantische Komödie. | |
. | Das Metazeichen dot (.) Wird verwendet, um ein einzelnes Zeichen mit Ausnahme einer neuen Zeile abzugleichen. | SELECT * FROM movies WHERE `year_released` REGEXP '200.'; gibt alle Filme an, die in den Jahren veröffentlicht wurden, beginnend mit den Zeichen "200", gefolgt von einem einzelnen Zeichen. Zum Beispiel 2005, 2007, 2008 usw. | |
[ABC] | Die Zeichenliste [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] | Die Zeichenliste [abc] wird verwendet, um alle Zeichen mit Ausnahme der eingeschlossenen Zeichen abzugleichen . | SELECT * FROM `movies` WHERE` title` REGEXP '[vwxyz]'; gibt alle Filme an, die andere Zeichen als die in "vwxyz" enthalten. | |
[AZ] | Das [AZ] wird verwendet, um mit jedem Großbuchstaben übereinzustimmen. | SELECT * FROM `member` 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] | Das [az] wird verwendet, um mit jedem Kleinbuchstaben übereinzustimmen | SELECT * FROM `member` WHERE` postal_address` REGEXP '[az]'; gibt alle Mitglieder an, die Postanschriften haben, die Zeichen von a bis z enthalten. Zum Beispiel Janet Jones mit der Mitgliedsnummer 1. | |
[0-9] | Die [0-9] wird verwendet, um eine beliebige Ziffer von 0 bis 9 abzugleichen. | SELECT * FROM `member` WHERE` contact_number` REGEXP '[0-9]' gibt allen Mitgliedern Kontaktnummern mit den Zeichen" [0-9] ". Zum Beispiel Robert Phil. | |
^ | Das Caret (^) wird verwendet, um das Spiel zu Beginn zu starten. | SELECT * FROM `movies` WHERE` title` REGEXP '[cd]'; Gibt alle Filme mit dem Titel an, beginnend mit einem der Zeichen in "cd". Zum Beispiel Codename Schwarz, Papas kleine Mädchen und Da Vinci-Code. | |
| | Der vertikale Balken (|) dient zum Isolieren von Alternativen. | SELECT * FROM `movies` WHERE` title` REGEXP '[cd] | [u]'; Gibt alle Filme mit dem Titel an, beginnend mit einem der Zeichen in "cd" oder "u". Zum Beispiel Codename Schwarz, Papas kleines Mädchen, Da Vinci-Code und Unterwelt - Erwachen. | |
[[: <:]] | Das [[: <:]] entspricht dem Wortanfang. | SELECT * FROM `movies` WHERE` title` REGEXP '[[: <:]] for'; gibt alle Filme mit Titeln an, die mit den Zeichen beginnen. Zum Beispiel: Sarah Marshal vergessen. | |
[[:>:]] | Das [[:>:]] entspricht dem Ende von Wörtern. | SELECT * FROM `movies` WHERE` title` REGEXP 'ack [[:>:]]'; Gibt alle Filme mit Titeln an, die mit den Zeichen "ack" enden. Beispiel: Codename Schwarz. | |
[:Klasse:] | Die [: class:] entspricht einer Zeichenklasse, dh [: alpha:], um Buchstaben zuzuordnen, [: space:], um Leerzeichen zuzuordnen, [: punct:] entspricht Übereinstimmungszeichen und [: Upper:] für Buchstaben der oberen Klasse. | SELECT * FROM `movies` WHERE` title` REGEXP '[: alpha:]'; Gibt an, dass alle Filme mit Titeln 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 es als Teil des Musters in einem regulären Ausdruck verwenden möchten, sollten wir doppelte Backslashes (\\) verwenden.
Zusammenfassung
- Reguläre Ausdrücke bieten eine leistungsstarke und flexible Musterübereinstimmung, mit deren Hilfe wir Dienstprogramme für die Energiesuche für unsere Datenbanksysteme implementieren können.
- REGEXP ist der Operator, der beim Ausführen von Musterübereinstimmungen 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. Dies wird bei der Musterübereinstimmung nur berücksichtigt, wenn doppelte Backslashes verwendet wurden.
- Reguläre Ausdrücke unterscheiden nicht zwischen Groß- und Kleinschreibung.