MYSQL regularni izrazi (REGEXP) sa sintaksom i primjerima
Što su regularni izrazi?
Regularni izrazi pomažu u pretraživanju podataka koji odgovaraju složenim kriterijima. Pogledali smo zamjenske znakove u prethodnom vodiču. Ako ste već radili sa zamjenskim znakovima, možda se pitate zašto učiti regularne izraze kada možete dobiti slične rezultate korištenjem zamjenskih znakova. Zato što nam, u usporedbi sa zamjenskim znakovima, regularni izrazi omogućuju pretraživanje podataka koji odgovaraju još složenijem kriteriju.
Osnovna sintaksa
Osnovna sintaksa regularnog izraza je sljedeća
SELECT statements... WHERE fieldname REGEXP 'pattern';
OVDJE –
- "SELECT izjave..." je standard SELECT izraz
- "WHERE naziv polja" je naziv stupca na kojem se regularni izraz treba izvesti.
- “REGEXP 'uzorak'” REGEXP je operator regularnog izraza, a 'uzorak' predstavlja uzorak koji treba uskladiti s REGEXP. RLIKE je sinonim za REGEXP i postiže iste rezultate kao REGEXP. Da ga ne biste zamijenili s operatorom LIKE, it bolje koristiti REGEXP umjesto.
Pogledajmo sada praktičan primjer-
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Gornji upit traži sve naslove filmova koji u sebi sadrže riječ code. Nije važno nalazi li se "šifra" na početku, sredini ili kraju naslova. Sve dok je sadržano u naslovu tada će se uzeti u obzir.
Pretpostavimo da želimo pretraživati filmove koji počinju s a, b, c ili d, iza kojih slijedi bilo koji broj drugih znakova, kako bismo to postigli. Možemo koristiti regularni izraz zajedno s metakarakterima kako bismo postigli željene rezultate.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Izvršavanje gornje skripte u MySQL radna tezga u odnosu na myflixdb daje nam sljedeće 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 |
Pogledajmo sada pobliže naš regularni izraz odgovoran za gornji rezultat.
'^[abcd]' znak za umetanje (^) znači da se podudaranje uzorka treba primijeniti na početku, a popis znakova [abcd] znači da se u našem skupu rezultata vraćaju samo naslovi filmova koji počinju s a, b, c ili d.
Modificirajmo našu gornju skriptu i upotrijebimo NOT charlist i vidimo kakve ćemo rezultate dobiti nakon izvršenja našeg upita.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Izvršavanje gornje skripte u MySQL workbench u odnosu na myflixdb daje nam sljedeće 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 |
Pogledajmo sada izbliza naš regularni izraz koji je odgovoran za gore navedene rezultate.
'^[^abcd]' znak za umetanje (^) znači da se podudaranje uzorka treba primijeniti na početku, a popis znakova [^abcd] znači da su naslovi filmova koji počinju bilo kojim od priloženih znakova isključeni iz skupa rezultata.
Metaznakovi regularnog izraza
Ono što smo gledali u gornjem primjeru je najjednostavniji oblik regularnog izraza. Pogledajmo sada naprednija podudaranja uzoraka regularnih izraza. Pretpostavimo da želimo pretraživati naslove filmova koji počinju s uzorkom "kod" samo koristeći regularni izraz, kako bismo to učinili? Odgovor su metakarakteri. Omogućuju nam fino podešavanje rezultata pretraživanja uzoraka pomoću regularnih izraza.
Char | Description | Primjer | |
---|---|---|---|
* | The zvjezdica (*) metaznak se koristi za podudaranje s nula (0) ili više instanci nizova koji mu prethode | SELECT * FROM movies WHERE naslov REGEXP 'da*'; dat će sve filmove koji sadrže likove "da". Na primjer, Da Vincijev kod, Tatine djevojčice. | |
+ | The više (+) metaznak se koristi za podudaranje jedne ili više instanci nizova koji mu prethode. | SELECT * FROM `filmovi` WHERE `naslov` REGEXP 'pon+'; dati će svim filmovima koji sadrže likove "mon". Na primjer, Anđeli i demoni. | |
? | Pitanje(?) metaznak se koristi za podudaranje nule (0) ili jedne instance nizova koji mu prethode. | SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; dat će sve kategorije koje sadrže string com. Na primjer, komedija, romantična komedija. | |
. | The točka (.) metaznak se koristi za podudaranje bilo kojeg pojedinačnog znaka osim novog retka. | SELECT * FROM movies WHERE `year_released` REGEXP '200.'; dati će sve filmove objavljene u godinama koje počinju znakovima "200" nakon kojih slijedi bilo koji pojedinačni znak. Na primjer, 2005,2007,2008, XNUMX, XNUMX itd. | |
[abc] | The charlist [abc] se koristi za podudaranje bilo kojeg od priloženih znakova. | SELECT * FROM `filmovi` WHERE `naslov` REGEXP '[vwxyz]'; dat će sve filmove koji sadrže bilo koji pojedinačni lik u "vwxyz". Na primjer, X-Men, Da Vinci Code, itd. | |
[^abc] | The charlist [^abc] koristi se za podudaranje bilo kojih znakova osim onih koji su priloženi. | SELECT * FROM `filmovi` WHERE `naslov` REGEXP '^[^vwxyz]'; dat će sve filmove koji sadrže znakove koji nisu u "vwxyz". | |
[AZ] | The [AZ] koristi se za podudaranje s bilo kojim velikim slovom. | SELECT * FROM `članovi` WHERE `poštanska_adresa` REGEXP '[AZ]'; dat će svim članovima koji imaju poštansku adresu koja sadrži bilo koji znak od A do Z. .Na primjer, Janet Jones s članskim brojem 1. | |
[the] | The [the] koristi se za podudaranje s bilo kojim malim slovom | SELECT * FROM `članovi` WHERE `poštanska_adresa` REGEXP '[az]'; će dati svim članovima koji imaju poštanske adrese koje sadrže bilo koji znak od a do z. .Na primjer, Janet Jones s članskim brojem 1. | |
[0-9] | The [0-9] koristi se za podudaranje bilo koje znamenke od 0 do 9. | SELECT * FROM `članovi` WHERE `broj_kontakta` REGEXP '[0-9]' dat će svim članovima koji su poslali kontakt brojeve koji sadrže znakove “[0-9]”. Na primjer, Robert Phil. | |
^ | The znak za umetanje (^) koristi se za početak utakmice na početku. | SELECT * FROM `filmovi` WHERE `naslov` REGEXP '^[cd]'; daje sve filmove čiji naslov počinje bilo kojim likom u “cd”. Na primjer, Kodno ime Black, Tatine djevojčice i Da Vincijev kod. | |
| | The okomita crta (|) koristi se za izdvajanje alternativa. | SELECT * FROM `filmovi` WHERE `naslov` REGEXP '^[cd]|^[u]'; daje sve filmove čiji naslov počinje bilo kojim od znakova u "cd" ili "u". Na primjer, kodno ime Black, Daddy's Little Girl, Da Vinci Code i Underworld – Awakening.. | |
[[:<:]] | The[[:<:]] odgovara početku riječi. | SELECT * FROM `filmovi` WHERE `naslov` REGEXP '[[:<:]]za';
daje sve filmove s naslovima koji počinju likovima. Na primjer: Zaboravljanje Sarah Marshal. |
|
[[:>:]] | The [[:>:]] odgovara kraju riječi. | SELECT * FROM `filmovi` WHERE `naslov` REGEXP 'ack[[:>:]]';
daje sve filmove čiji naslovi završavaju znakovima "ack" .Na primjer, Kodni naziv Black. |
|
[:razred:] | The [:razred:] odgovara klasi znakova, tj
[:alfa:] uskladiti slova, [:prostor:] da odgovara bijelom prostoru, [:punct:] je podudarna interpunkcija i [:upper:] za slova više klase. |
SELECT * FROM `filmovi` WHERE `naslov` REGEXP '[:alpha:]';
daje da svi filmovi čiji naslovi sadrže samo slova .Na primjer, Forgetting Sarah Marshal, X-Men itd. Film kao što je Pirates of the Caribbean 4 bit će izostavljen ovim upitom. |
Obrnuta kosa crta (\) koristi se kao izlazni znak. Ako ga želimo koristiti kao dio uzorka u regularnom izrazu, trebali bismo koristiti dvostruke kose crte (\\)
Rezime
- Regularni izrazi pružaju snažno i fleksibilno podudaranje uzoraka koje nam može pomoći u implementaciji moćnih uslužnih programa za pretraživanje za naše sustave baza podataka.
- REGEXP je operator koji se koristi za izvođenje podudaranja uzorka regularnog izraza. RLIKE je sinonim
- Regularni izrazi podržavaju brojne metaznakove koji omogućuju veću fleksibilnost i kontrolu pri izvođenju podudaranja uzoraka.
- Obrnuta kosa crta koristi se kao izlazni znak u regularnim izrazima. Uzima se u obzir u podudaranju uzorka samo ako su korištene dvostruke kose crte.
- Regularni izrazi ne razlikuju velika i mala slova.