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.