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.