Expresii regulate MYSQL (REGEXP) cu sintaxă & Exemple

Anonim

Ce sunt expresiile regulate?

Expresiile regulate ajută la căutarea datelor care corespund criteriilor complexe. Ne-am uitat la metacaracterele din tutorialul anterior. Dacă ați mai lucrat cu metacaracterele, s-ar putea să vă întrebați de ce să învățați expresii regulate atunci când puteți obține rezultate similare folosind metacaracterele. Deoarece, comparativ cu metacaracterele, expresiile regulate ne permit să căutăm date care se potrivesc cu criterii și mai complexe.

Sintaxa de bază

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

SELECT statements… WHERE fieldname REGEXP 'pattern';

AICI -

  • "Instrucțiuni SELECT ..." este instrucțiunea SELECT standard
  • „WHERE fieldname” este numele coloanei pe care urmează să fie efectuată expresia regulată.
  • „Pattern” REGEXP REGEXP este operatorul de expresie regulată, iar„ pattern ”reprezintă modelul care trebuie asociat cu REGEXP. RLIKE este sinonimul pentru REGEXP și obține aceleași rezultate ca și REGEXP. Pentru a evita confuzia cu operatorul LIKE, este mai bine să folosiți REGEXP în schimb.

Să vedem acum un exemplu practic-

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

Interogarea de mai sus caută toate titlurile filmelor care conțin codul cuvântului. Nu contează dacă „codul” se află 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ă dorim să căutăm filme care încep cu a, b, c sau d, urmate de orice număr de alte personaje, cum ne-am gândi să realizăm acest lucru. Putem folosi o expresie regulată împreună cu metacaractere pentru a obține rezultatele dorite.

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
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 o privire atentă la expresia noastră regulată responsabilă de rezultatul de mai sus.

'[abcd]' caret (^) înseamnă că potrivirea tiparului trebuie aplicată la început, iar lista de caractere [abcd] înseamnă că numai titlurile filmelor 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 o privire atentă la expresia noastră regulată responsabilă pentru rezultatele de mai sus.

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

Metacaractere de expresie regulată

Ceea ce am analizat în exemplul de mai sus este cea mai simplă formă de expresie regulată. Să analizăm acum potrivirile mai avansate ale modelelor de expresie regulată. Să presupunem că dorim să căutăm titluri de filme care încep cu modelul „cod” folosind doar o expresie regulată, cum ne-am descurca? Răspunsul este metacaractere. Acestea ne permit să reglăm fin rezultatele căutării modelelor noastre folosind expresii regulate.

Char Descriere Exemplu
* Asterisc (*) metacaractere este utilizat pentru a se potrivi cu zero (0) sau mai multe instanțe ale corzilor precedente ea SELECTAȚI * DIN FILME UNDE titlul REGEXP 'da *'; va da tuturor filmelor care conțin personaje „da”. De exemplu, Da Vinci Code, Daddy's Little Girls.
+ Plus (+) metacaractere este utilizat pentru a se potrivi una sau mai multe exemple de șiruri precedente ea. SELECTAȚI * DIN `filme` UNDE„ title` REGEXP 'mon +'; va da tuturor filmelor care conțin personaje „lun”. De exemplu, Îngeri și demoni.
? Întrebarea (?) Metacaracter este utilizată pentru a se potrivi cu zero (0) sau cu o instanță a șirurilor care o precedă. SELECT * FROM `categories` WHERE` category_name` REGEXP 'com?'; va da toate categoriile care conțin șir com. De exemplu, comedie, comedie romantică.
. Punct (.) Metacaractere si este folosit pentru a se potrivi cu orice caracter unic în excepția unei noi linii. SELECTEAZĂ * DIN FILME UNDE `year_released` REGEXP '200.'; va oferi toate filmele lansate în anii începând cu personaje „200” urmate de un singur personaj. De exemplu, 2005,2007,2008 etc.
[abc] Lista de caractere [abc] este utilizată pentru a se potrivi cu oricare dintre caracterele incluse. SELECTAȚI * DIN `filme` UNDE` title` REGEXP '[vwxyz]'; va oferi toate filmele care conțin un singur personaj din „vwxyz”. De exemplu, X-Men, Codul Da Vinci etc.
[abc] Lista de caractere [abc] este utilizată pentru a se potrivi cu orice caractere, cu excepția celor incluse. SELECT * DIN `filme` UNDE` title` REGEXP '[vwxyz]'; va oferi toate filmele care conțin alte caractere decât cele din „vwxyz”.
[AZ] [AZ] este utilizat pentru a se potrivi orice literă majusculă. SELECTAȚI * DIN `membri` UNDE` postal_address` REGEXP '[AZ]'; va da tuturor membrilor care au 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 utilizat pentru a se potrivi orice literă minusculă SELECTAȚI * DIN `membri` UNDE` postal_address` REGEXP '[az]'; va da 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 utilizat pentru a se potrivi orice cifră de la 0 până la 9. SELECT * FROM `members` WHERE` contact_number` REGEXP '[0-9]' va da tuturor membrilor care au trimis numere de contact care conțin caractere „[0-9]”. De exemplu, Robert Phil.
^ Caret (^) este folosit pentru a începe meciul de la inceput. SELECTAȚI * DIN `filme` UNDE` title` REGEXP '[cd]'; oferă toate filmele cu titlul începând cu oricare dintre personajele din „cd”. De exemplu, Numele codului negru, Fetițele tăticului și Codul Da Vinci.
| Bara verticală (|) este utilizată pentru a izola alternativele. SELECTA * DIN `filme` UNDE` title` REGEXP '[cd] | [u]'; oferă toate filmele cu titlul începând cu oricare dintre personajele din „cd” sau „u”. De exemplu, Numele codului Negru, Fetița tăticului, Codul Da Vinci și Underworld - Awakening.
[[: <:]] [[: <:]] Se potrivește începutul cuvintelor. SELECTAȚI * DIN `filme` UNDE` title` REGEXP '[[: <:]] pentru'; oferă toate filmele cu titluri începând cu personajele. De exemplu: Uitarea de Sarah Marshal.
[[:>:]] [[:>:]] Se potrivește sfârșitul cuvintelor. SELECTAȚI * DIN `filme` UNDE` title` REGEXP 'ack [[:>:]]'; oferă toate filmele cu titluri care se termină cu caracterele „ack”. De exemplu, Nume cod negru.
[:clasă:] [: Clasa:] se potrivește cu un caracter de clasă și anume [: alfa:] pentru a se potrivi litere, [: spațiu:] pentru a se potrivi spațiu alb, [: Punct:] este punctuația pentru meci și [: superior:] pentru litere de clasă superioară. SELECTAȚI * DIN `filme` UNDE` title` REGEXP '[: alpha:]'; oferă toate filmele cu titluri conțin numai litere. De exemplu, Uitând-o pe Sarah Marshal, X-Men etc.

Backslash (\) este folosit ca un caracter de evadare. Dacă dorim să-l folosim ca parte a modelului într-o expresie obișnuită, ar trebui să folosim backslashes duble (\\)

rezumat

  • Expresiile regulate oferă o potrivire puternică și flexibilă a modelelor, care ne poate ajuta să implementăm utilitare de căutare de energie pentru sistemele noastre de baze de date.
  • REGEXP este operatorul utilizat atunci când se efectuează potriviri tipare de expresie regulată. RLIKE este sinonimul
  • Expresiile regulate acceptă o serie de metacaractere care permit mai multă flexibilitate și control atunci când se efectuează potriviri de tipare.
  • Backslash-ul este folosit ca personaj de scăpare în expresiile regulate. Se ia în considerare doar în cazul potrivirii tiparului, dacă s-au folosit bare oblice duble.
  • Expresiile regulate nu sunt sensibile la majuscule și minuscule.