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.

Dnevni bilten Guru99

Započnite dan s najnovijim i najvažnijim vijestima o umjetnoj inteligenciji koje vam donosimo upravo sada.