MYSQL regularni izrazi (REGEXP) sa sintaksom & Primjeri

Anonim

Š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.