Expresii regulate MYSQL (REGEXP) cu sintaxă și exemple

Ce sunt expresiile regulate?

Expresiile regulate ajută la căutarea datelor care corespund criteriilor complexe. Ne-am uitat la metacaracterele în tutorialul anterior. Dacă ați mai lucrat cu metacaracterele, s-ar putea să vă întrebați de ce să învățați expresii regulate când puteți obține rezultate similare folosind metacaracterele. Pentru că, în comparație cu metacaracterele, expresiile regulate ne permit să căutăm date care corespund unui criteriu și mai complex.

Sintaxa de bază

Sintaxa de bază pentru o expresie regulată este următoarea

SELECT statements... WHERE fieldname REGEXP 'pattern';

AICI -

  • „Instrucțiuni SELECT…” este standardul instrucțiunea SELECT
  • „UNDE nume câmp” este numele coloanei pe care urmează să fie efectuată expresia regulată.
  • „Model” REGEXP” REGEXP este operatorul expresiei regulate, iar „pattern” reprezintă modelul care urmează să fie potrivit de REGEXP. RLIKE este sinonim pentru REGEXP și obține aceleași rezultate ca REGEXP. Pentru a evita confundarea cu operatorul LIKE, it mai bine să utilizați REGEXP in schimb.

Să ne uităm acum la un exemplu practic -

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

Interogarea de mai sus caută toate titlurile de filme care au codul cuvântului în ele. Nu contează dacă „codul” este la începutul, mijlocul sau sfârșitul titlului. Atâta timp cât este conținut în titlu, atunci va fi luat în considerare.

Să presupunem că vrem să căutăm filme care încep cu a, b, c sau d , urmate de orice număr de alte personaje, cum am face pentru a realiza asta. Putem folosi o expresie regulată împreună cu metacaracterele pentru a obține rezultatele dorite.

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

Executarea scriptului de mai sus în MySQL banc de lucru împotriva myflixdb ne oferă următoarele rezultate.

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

Să aruncăm acum o privire atentă la expresia noastră regulată responsabilă pentru rezultatul de mai sus.

„^[abcd]” semnul caret (^) înseamnă că potrivirea modelului trebuie aplicată la început, iar lista de caractere [abcd] înseamnă că numai titlurile de filme care încep cu a, b, c sau d sunt returnate în setul nostru de rezultate.

Să modificăm scriptul de mai sus și să folosim lista de caractere NOT și să vedem ce rezultate vom obține după executarea interogării noastre.

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

Executarea scriptului de mai sus în MySQL Workbench împotriva myflixdb ne oferă următoarele rezultate.

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

Să aruncăm acum o privire atentă la expresia noastră regulată responsabilă pentru rezultatele de mai sus.

„^[^abcd]” semnul caret (^) înseamnă că potrivirea modelului trebuie aplicată la început, iar lista de caractere [^abcd] înseamnă că titlurile filmelor care încep cu oricare dintre caracterele incluse sunt excluse din setul de rezultate.

Metacaracterele expresiei regulate

Ceea ce ne-am uitat în exemplul de mai sus este cea mai simplă formă a unei expresii regulate. Să ne uităm acum la potriviri mai avansate de modele de expresii regulate. Să presupunem că vrem să căutăm titluri de filme care încep cu modelul „cod” doar folosind o expresie obișnuită, cum am proceda? Răspunsul sunt metacaracterele. Acestea ne permit să ajustam rezultatele căutării modelelor folosind expresii regulate.

Mangal Descriere Exemplu
* asterisc (*) metacaracterul este folosit pentru a potrivi zero (0) sau mai multe instanțe ale șirurilor care îl precedă SELECT * FROM filmele WHERE titlul REGEXP 'da*'; va oferi tuturor filmelor care conțin personaje „da”. De exemplu, Da Vinci Code, Daddy's Little Girls.
+ mai mult (+) metacaracterul este folosit pentru a potrivi una sau mai multe instanțe de șiruri care îl precedă. SELECTAȚI * FROM `movies` WHERE `title` REGEXP 'mon+'; va da tuturor filmelor care conțin personaje „mon”. De exemplu, Îngeri și Demoni.
? Intrebarea(?) metacaracterul este folosit pentru a potrivi zero (0) sau o instanță a șirurilor care îl precedă. SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; va da toate categoriile care conțin șir com . De exemplu, comedie , comedie romantică .
. punct (.) metacaracterul este folosit pentru a potrivi orice caracter, cu excepția unei linii noi. SELECT * FROM filmele WHERE `year_released` REGEXP '200.'; va oferi toate filmele lansate în anii începând cu caracterele „200” urmate de orice singur personaj. De exemplu, 2005,2007,2008 etc.
[abc] charlist [abc] este folosit pentru a potrivi oricare dintre caracterele incluse. SELECTAȚI * DIN `filme` WHERE `titlu` REGEXP '[vwxyz]'; va oferi toate filmele care conțin un singur personaj în „vwxyz”. De exemplu, X-Men, Codul lui Da Vinci etc.
[^abc] charlist [^abc] este folosit pentru a potrivi orice caractere, cu excepția celor incluse. SELECTAȚI * DIN `filme` WHERE `titlu` REGEXP '^[^vwxyz]'; va oferi toate filmele care conțin alte personaje decât cele din „vwxyz”.
[AZ] [AZ] este folosit pentru a potrivi orice literă mare. SELECTAȚI * FROM `membri` WHERE `adresa_poștal` REGEXP '[AZ]'; va oferi tuturor membrilor care au o adresă poștală care conține orice caracter de la A la Z. De exemplu, Janet Jones cu numărul de membru 1.
[az] [az] este folosit pentru a potrivi orice literă mică SELECT * FROM `membri` WHERE `adresa_postal` REGEXP '[az]'; va oferi tuturor membrilor care au adrese poștale care conțin orice caracter de la a la z. .De exemplu, Janet Jones cu numărul de membru 1.
[0-9] [0-9] este folosit pentru a potrivi orice cifră de la 0 la 9. SELECTAȚI * FROM `membri` WHERE `număr_de_contact` REGEXP '[0-9]' va oferi tuturor membrilor care au trimis numere de contact care conțin caractere „[0-9]”. De exemplu, Robert Phil.
^ accent (^) este folosit pentru a începe meciul de la început. SELECTAȚI * DIN `filme` WHERE `titlu` REGEXP '^[cd]'; oferă toate filmele cu titlul care începe cu oricare dintre personajele din „cd”. De exemplu, Nume de cod Negru, Fetițele lui Tati și Codul lui Da Vinci.
| bară verticală (|) este folosit pentru a izola alternativele. SELECTAȚI * DIN `filme` WHERE `titlu` REGEXP '^[cd]|^[u]'; oferă toate filmele cu titlul care începe cu oricare dintre personajele din „cd” sau „u”. De exemplu, Nume de cod Black, Daddy's Little Girl, Da Vinci Code și Underworld – AwakenING.
[[:<:]] [[:<:]] se potrivește cu începutul cuvintelor. SELECTAȚI * DIN `filme` WHERE `titlu` REGEXP '[[:<:]]pentru';

dă toate filmele cu titluri începând cu personajele. De exemplu: uitând-o pe Sarah Marshal.

[[:>:]] [[:>:]] se potrivește cu sfârșitul cuvintelor. SELECTAȚI * FROM `movies` WHERE `title` REGEXP 'ack[[:>:]]';

oferă toate filmele cu titluri care se termină cu personajele „ack”

.De exemplu, Nume cod Negru.

[:clasă:] [:clasă:] se potrivește cu o clasă de caractere, adică

[:alfa:] a potrivi literele, [:spaţiu:] pentru a se potrivi cu spațiul alb, [:punct:] este potrivirea punctuațiilor și [:upper:] pentru literele din clasa superioară.

SELECTAȚI * DIN `filme` WHERE `titlu` REGEXP '[:alpha:]';

oferă toate filmele cu titluri conțin doar litere

.De exemplu, uitând Sarah Marshal, X-Men etc.

Filmul precum Pirații din Caraibe 4 va fi omis de această interogare.

Bara oblică inversă (\) este folosită ca caracter de escape. Dacă vrem să-l folosim ca parte a modelului într-o expresie regulată, ar trebui să folosim bare oblice inverse duble (\\)

Rezumat

  • Expresiile regulate oferă o potrivire puternică și flexibilă de model care ne poate ajuta să implementăm utilitare de căutare a puterii pentru sistemele noastre de baze de date.
  • REGEXP este operatorul utilizat atunci când se efectuează potriviri de modele de expresii regulate. RLIKE este sinonimul
  • Expresiile regulate acceptă o serie de metacaractere care permit mai multă flexibilitate și control atunci când se efectuează potriviri de modele.
  • Bara oblică inversă este folosită ca caracter de escape în expresiile regulate. Este luat în considerare numai în potrivirea modelului dacă s-au folosit bare oblice inverse duble.
  • Expresiile regulate nu sunt sensibile la majuscule.

Buletin informativ zilnic Guru99

Începe-ți ziua cu cele mai recente și importante știri despre inteligența artificială, livrate chiar acum.