Što su regularni izrazi?
Regularni izrazi pomažu u pretraživanju podataka koji odgovaraju složenim kriterijima. Zamijenili smo zamjenske znakove u prethodnom vodiču. Ako ste i prije radili s zamjenskim znakovima, možda se pitate zašto učiti regularne izraze kad slične rezultate možete dobiti pomoću zamjenskih znakova. Jer, u usporedbi s zamjenskim znakovima, regularni izrazi omogućuju nam pretraživanje podataka koji odgovaraju još složenijim kriterijima.
Osnovna sintaksa
Osnovna sintaksa za regularni izraz je sljedeća
SELECT statements… WHERE fieldname REGEXP 'pattern';
OVDJE -
- "SELECT naredbe ..." je standardni SELECT izraz
- "WHERE ime polja" naziv je stupca na kojem se treba izvesti regularni izraz.
- "REGEXP 'uzorak'" REGEXP je operator regularnog izraza, a 'uzorak' predstavlja uzorak s kojim se REGEXP mora podudarati. RLIKE je sinonim za REGEXP i postiže iste rezultate kao i REGEXP. Da ga ne biste pobrkali s operatorom LIKE, bolje je koristiti REGEXP .
Pogledajmo sada praktični primjer -
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Gornji upit pretražuje sve naslove filmova koji u sebi sadrže riječ. Nije važno je li "kod" na početku, sredini ili na kraju naslova. Sve dok je sadržan u naslovu, tada će se razmatrati.
Pretpostavimo da želimo tražiti filmove koji započinju s a, b, c ili d, nakon kojih slijedi bilo koji broj drugih likova, kako bismo to postigli. Regularni izraz možemo koristiti zajedno s metaznakovima da bismo postigli željene rezultate.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Izvršenje gornje skripte u MySQL radnom stolu protiv 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 izbliza naš regularni izraz odgovoran za gornji rezultat.
'[abcd]' oznaka (^) znači da bi se podudaranje uzorka trebalo primijeniti na početku, a charlist [abcd] znači da se u našem rezultatskom skupu vraćaju samo naslovi filmova koji počinju s a, b, c ili d.
Izmijenimo našu gornju skriptu i upotrijebimo listu popisa NOT i vidjet ćemo kakve ćemo rezultate dobiti nakon izvršavanja našeg upita.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Izvršenje gornje skripte u MySQL radnom stolu protiv 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 odgovoran za gore navedene rezultate.
'[abcd]' znak (^) znači da se podudaranje uzorka treba primijeniti na početku, a charlist [abcd] znači da su naslovi filmova koji počinju s bilo kojim od zatvorenih znakova izuzeti iz 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 tražiti naslove filmova koji počinju s uzorkom "kod" samo koristeći regularni izraz, kako bismo to učinili? Odgovor su metaznakovi. Omogućuju nam precizno podešavanje rezultata pretraživanja uzoraka pomoću regularnih izraza.
Char | Opis | Primjer | |
---|---|---|---|
* | Oznaka zvjezdica (*) koristi se za podudaranje s nulom (0) ili više primjera nizova koji joj prethode | ODABERITE * IZ filmova GDJE naslov REGEXP 'da *'; dat će svim filmovima koji sadrže likove "da". Na primjer, Da Vincijev kod, Daddy's Little Girls. | |
+ | Znak plus (+) koristi se za podudaranje s jednim ili više primjera nizova koji mu prethode. | ODABERITE * IZ `filmova` GDJE` naslov` REGEXP 'pon +'; dat će svim filmovima koji sadrže likove "pon" .Na primjer, Anđeli i demoni. | |
? | Metakarakter pitanja (?) Koristi se za podudaranje s nulom (0) ili jednim primjerom nizova koji mu prethode. | ODABERI * IZ `kategorija` GDJE` ime_kategorije` REGEXP 'com?'; dat će sve kategorije koje sadrže niz com .Na primjer, komedija, romantična komedija. | |
. | Točka (.) Metaznak se koristi za bilo koji jedan znak na iznimku u novom retku. | ODABERITE * IZ filmova GDJE `godina_objavljena` REGEXP '200.'; dat će sve filmove objavljene u godinama počevši sa znakovima "200", a zatim bilo kojim pojedinačnim znakom. Na primjer, 2005,2007,2008 itd. | |
[abc] | Lista char [abc] koristi se za podudaranje s bilo kojim od priloženih znakova. | ODABERITE * IZ `filmova` GDJE` naslov` REGEXP '[vwxyz]'; dat će sve filmove koji sadrže bilo koji znak u "vwxyz". Na primjer, X-Men, Da Vincijev kod itd. | |
[abc] | Lista char [abc] koristi se za podudaranje svih znakova, osim onih koji su priloženi. | ODABERITE * IZ `filmova` GDJE` naslov` REGEXP '[vwxyz]'; dat će sve filmove koji sadrže likove osim onih u "vwxyz". | |
[AZ] | [AZ] se koristi za bilo koji veliko slovo. | ODABERITE * FROM `members` WHERE` postal_address` REGEXP '[AZ]'; dat će svim članovima koji imaju poštansku adresu koja sadrži bilo koji znak od A do Ž ... Na primjer, Janet Jones s članskim brojem 1. | |
[az] | [AZ] se koristi za bilo koji malim slovom | ODABERI * FROM `members` WHERE` postal_address` REGEXP '[az]'; dat će 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] | [0-9] koristi za bilo koji od brojku 0 do 9. | ODABERITE * FROM `members` WHERE` contact_number` REGEXP '[0-9]' dat će svim članovima prijavljene brojeve za kontakt koji sadrže znakove "[0-9]" .Na primjer, Robert Phil. | |
^ | Znak za umetanje (^) se koristi za pokretanje utakmicu na početak. | ODABERITE * IZ `filmova` GDJE` naslov` REGEXP '[cd]'; daje sve filmove s naslovom koji započinje s bilo kojim likom u "cd-u". Na primjer, Code Name Black, Daddy's Little Girls i Da Vinci Code. | |
| | Okomita traka (|) se koristi za izoliranje alternative. | ODABERITE * IZ `filmova` GDJE` naslov` REGEXP '[cd] | [u]'; daje sve filmove s naslovom koji započinje s bilo kojim od znakova u "cd" ili "u" .Na primjer, Code Name Black, Daddy's Little Girl, Da Vincijev kod i Underworld - Awakening. | |
[[: <:]] | [[: <:]] Odgovara početku riječi. | ODABERITE * IZ `filmova` GDJE` naslov` REGEXP '[[: <:]] za'; daje sve filmove s naslovima koji počinju s likovima. Na primjer: Zaborav na Saru Maršal. | |
[[:>:]] | [[:>:]] Odgovara kraju riječi. | ODABERITE * IZ `filmova` GDJE` naslov` REGEXP 'naprijed [[:>:]]'; daje sve filmove s naslovima koji završavaju znakovima "ack" .Na primjer, kodno ime crno. | |
[: klasa:] | [: Klasa:] odgovara znakova klase, odnosno [: alfa:] kako bi se slagala slova, [: Prostor:] kako bi se slagala bijelog prostora, [: punct:] Je li interpunkcije utakmicu i [: gornja:] za gornje klase slova. | ODABERITE * IZ `filmova` GDJE` naslov` REGEXP '[: alfa:]'; daje da svi filmovi s naslovima sadrže samo slova. Na primjer, ovaj zaborav će izostaviti film poput Pirates of the Caribbean 4 (zaboravljeni Sarah Marshal, X-Men itd.). |
Kosa kosa crta (\) koristi se kao izlazni znak. Ako ga želimo koristiti kao dio uzorka u regularnom izrazu, trebali bismo upotrijebiti dvostruke kose crte (\\)
Sažetak
- Regularni izrazi pružaju snažno i fleksibilno podudaranje uzoraka koje nam mogu pomoći u implementaciji uslužnih programa za pretraživanje snage za naše sustave baza podataka.
- REGEXP je operator koji se koristi prilikom izvođenja podudaranja uzoraka regularnih izraza. RLIKE je sinonim
- Regularni izrazi podržavaju brojne metaznakove koji omogućuju veću fleksibilnost i kontrolu prilikom izvođenja podudaranja uzoraka.
- Kosa kosa crta koristi se kao izlazni znak u regularnim izrazima. U podudaranju uzorka uzima se u obzir samo ako su korištene dvostruke kose crte.
- Regularni izrazi ne razlikuju velika i mala slova.