Heim  >  Artikel  >  Datenbank  >  Ausführliche Diskussion zum MYSQL-Mustervergleich, REGEXP und zur gemeinsamen Nutzung von Code

Ausführliche Diskussion zum MYSQL-Mustervergleich, REGEXP und zur gemeinsamen Nutzung von Code

黄舟
黄舟Original
2017-03-25 13:42:051819Durchsuche

Der folgende Editor bringt Ihnen ein Klischee MYSQLVerwendung von Mustervergleich REGEXP und dergleichen. Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Editor, um einen Blick darauf zu werfen Übereinstimmung. REGEXP erfordert nur eine teilweise Übereinstimmung.

Mit anderen Worten: Um Like zu verwenden, müssen alle Inhalte dieses Felds die Bedingungen erfüllen, während REGEXP nur ein Fragment benötigt, um die Bedingungen zu erfüllen.

MySQL bietet Standard-SQL-Mustervergleich (wie) sowie ein erweitertes Mustervergleichsformat für reguläre Ausdrücke basierend auf Unix-Dienstprogrammen wie vi, grep und sed (regexp). Mit dem SQL-Mustervergleich können Sie „_“ verwenden, um ein beliebiges einzelnes Zeichen abzugleichen, und „%“, um eine beliebige Anzahl von Zeichen (einschließlich Nullzeichen) abzugleichen. In MySQL ignoriert der SQL-Modus standardmäßig die Groß-/Kleinschreibung. Einige Beispiele sind unten aufgeführt. Beachten Sie, dass Sie im SQL-Modus nicht = oder != verwenden können. Verwenden Sie stattdessen den Vergleichsoperator LIKE oder NOT LIKE .
So finden Sie Namen, die mit „b“ beginnen:


So finden Sie Namen, die mit „fy“ enden:

So finden Sie Namen, die ein „w“ enthalten:

mysql> SELECT * FROM pet WHERE name LIKE "b%";
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

So finden Sie Namen, die „For a name of“ enthalten genau 5 Zeichen, verwenden Sie das Musterzeichen „_“:

mysql> SELECT * FROM pet WHERE name LIKE "%fy";
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+

REGEXP

mysql> SELECT * FROM pet WHERE name LIKE "%w%";
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+
Eine weitere Übereinstimmung basiert auf regulären Ausdrücken . Wenn Sie nach Übereinstimmungen mit solchen Mustern suchen, verwenden Sie die Operatoren REGEXP und NOT REGEXP (oder RLIKE und NOT RLIKE, die Synonyme sind).

„.“ entspricht einem beliebigen einzelnen Zeichen.
mysql> SELECT * FROM pet WHERE name LIKE "_";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+


Eine Zeichenklasse „[...]“ entspricht jedem Zeichen in eckigen Klammern. Beispielsweise entspricht „[abc]“ „a“, „b“ oder „c“. Um einen Zeichenbereich zu benennen, verwenden Sie ein „-“. „[a-z]“ entspricht jedem Kleinbuchstaben, während „[0-9]“ jeder Zahl entspricht.

„*“ stimmt mit null oder mehr der vorangehenden Dinge überein. Beispielsweise entspricht „x*“ einer beliebigen Anzahl von „x“-Zeichen, „[0-9]*“ einer beliebigen Anzahl von Ziffern und „.*“ einer beliebigen Anzahl von beliebigen Zeichen.


Bei regulären Ausdrücken wird die Groß-/Kleinschreibung beachtet

, aber wenn Sie möchten, können Sie eine Zeichenklasse verwenden, um beide Schreibweisen abzugleichen. „[aA]“ entspricht beispielsweise einem Klein- oder Großbuchstaben „a“ und „[a-zA-Z]“ entspricht jedem Buchstaben, der in beide Richtungen geschrieben ist.


Muster stimmen überein, wenn sie irgendwo im getesteten Wert vorkommen (SQL-Muster stimmen überein, solange sie mit dem gesamten Wert übereinstimmen).

Um ein Muster so zu positionieren, dass es mit dem Anfang oder Ende des zu testenden Werts übereinstimmen muss,

verwenden Sie „^“ am Anfang des Musters oder „$“ am Ende Muster. Um zu veranschaulichen, wie erweiterte reguläre Ausdrücke funktionieren, wird die oben gezeigte LIKE-Abfrage unten mit REGEXP umgeschrieben: Für Namen, die mit beginnen, verwenden Sie „^“, um den Anfang des Namens abzugleichen, und „ [bB]“, um einem Klein- oder Großbuchstaben „b“ zu entsprechen:

Um Namen zu finden, die mit „fy“ enden, verwenden Sie „[ wW]“, um entweder einen Klein- oder einen Großbuchstaben „w“ zu finden:
[^……], sucht nach Zeichen, die nicht in [] enthalten sind, z. B. bei der Abfrage von Namen, die mit beginnen w/z/s

*, 0 oder mehr Mal wiederholt. Schüler, die mit Javascript vertraut sind, wissen, dass

'str*'. kann mit st/str/strr/strrr...
mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

? übereinstimmen, 0 oder 1 Mal wiederholt

'str?' kann mit st/str/strrr übereinstimmen
mysql> SELECT * FROM pet WHERE name REGEXP "fy$";
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+

+, 1 Mal wiederholt oder mehrmals

'str+ 'Kann mit str/strr/strrr/strrr übereinstimmen...
mysql> SELECT * FROM pet WHERE name REGEXP "[wW]";
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+

Im Vergleich zu den regulären Regeln in Javascript sind die regulären Regeln hier und dort vereinfachte Versionen ist kein Lazy Matching/Greedy Matching und [] wird nicht unterstützt. Die Syntax von wsd unterstützt kein Chinesisch und ist relativ einfach .

Das obige ist der detaillierte Inhalt vonAusführliche Diskussion zum MYSQL-Mustervergleich, REGEXP und zur gemeinsamen Nutzung von Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn