Regularni izrazi MYSQL (REGEXP) s sintakso & Primeri

Anonim

Kaj so regularni izrazi?

Regularni izrazi pomagajo iskati podatke, ki se ujemajo s kompleksnimi merili. Nadomestne znake smo si ogledali v prejšnji vadnici. Če ste že delali z nadomestnimi znaki, se morda sprašujete, zakaj se učite regularnih izrazov, če lahko z nadomestnimi znaki dobite podobne rezultate. Ker v primerjavi z nadomestnimi znaki regularni izrazi omogočajo iskanje podatkov, ki se ujemajo s še bolj zapletenim merilom.

Osnovna sintaksa

Osnovna sintaksa regularnega izraza je naslednja

SELECT statements… WHERE fieldname REGEXP 'pattern';

TUKAJ -

  • "SELECT stavki ..." je standardni SELECT stavek
  • "WHERE ime polja" je ime stolpca, v katerem naj bo izveden regularni izraz.
  • "REGEXP 'vzorec'" REGEXP je operator regularnega izraza in 'vzorec' predstavlja vzorec, ki ga mora ujemati REGEXP. RLIKE je sinonim za REGEXP in dosega enake rezultate kot REGEXP. Da ga ne bi zamenjali z operaterjem LIKE, raje uporabite REGEXP .

Oglejmo si zdaj praktični primer -

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

Zgornja poizvedba išče vse naslove filmov, v katerih je besedna koda. Ni pomembno, ali je "koda" na začetku, sredini ali koncu naslova. Dokler je vsebovan v naslovu, bo upoštevan.

Predpostavimo, da želimo iskati filme, ki se začnejo z a, b, c ali d, ki jim sledi poljubno število drugih znakov, kako bi to dosegli. Z regularnim izrazom lahko skupaj z metaznaki dosežemo želene rezultate.

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

Izvedba zgornjega skripta v delovnem okolju MySQL proti myflixdb nam da naslednje 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

Poglejmo zdaj naš natančen izraz, odgovoren za zgornji rezultat.

'[abcd]' oznaka (^) pomeni, da je treba na začetku uporabiti ujemanje vzorca, seznam znakov [abcd] pa pomeni, da so v našem naboru rezultatov vrnjeni samo naslovi filmov, ki se začnejo z a, b, c ali d.

Spremenimo zgornji skript in uporabimo seznam oznak NOT in si oglejmo, kakšne rezultate bomo dobili po izvedbi naše poizvedbe.

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

Izvedba zgornjega skripta v delovnem okolju MySQL proti myflixdb nam da naslednje 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

Zdaj si natančno oglejmo naš regularni izraz, odgovoren za zgornje rezultate.

'[abcd]' oznaka (^) pomeni, da je treba na začetku uporabiti ujemanje vzorca, seznam znakov [abcd] pa pomeni, da so naslovi filmov, ki se začnejo s katerim koli od priloženih znakov, izključeni iz nabora rezultatov.

Metaznaki regularnih izrazov

Kar smo si ogledali v zgornjem primeru, je najpreprostejša oblika regularnega izraza. Poglejmo zdaj naprednejša ujemanja vzorcev regularnih izrazov. Recimo, da želimo poiskati naslove filmov, ki se začnejo z vzorcem "koda", samo z regularnim izrazom, kako bi to storili? Odgovor so metaznaki. Omogočajo nam natančno nastavitev rezultatov iskanja vzorcev z uporabo regularnih izrazov.

Char Opis Primer
* Znak z zvezdico (*) se uporablja za ujemanje nič (0) ali več primerkov nizov pred njim IZBERITE * IZ filmov, KJE naslov REGEXP 'da *'; bodo vsi filmi z znaki "da". Na primer Da Vincijeva koda, Daddy's Little Girls.
+ Znak plus (+) se uporablja za ujemanje enega ali več primerov nizov pred njim. SELECT * FROM `movies` WHERE` title` REGEXP 'mon +'; bo vsem filmom, ki vsebujejo znake, dal "mon" .Na primer Angeli in demoni.
? Vprašanje (?) Se uporablja za ujemanje nič (0) ali enega primerka nizov pred njim. SELECT * FROM `categories` WHERE` ime_kategorije` REGEXP 'com?'; bo dal vse kategorije, ki vsebujejo niz com .Na primer komedija, romantična komedija.
. Znak s piko (.) Se uporablja za ujemanje katerega koli posameznega znaka, razen nove vrstice. IZBERITE * IZ filmov, KJER `leto_izdano` REGEXP '200.'; bo dal vse filme, izdane v letih, ki se začnejo z znaki "200", ki jim sledi kateri koli posamezen znak. Na primer 2005,2007,2008 itd.
[abc] Seznam znakov [abc] se uporablja za ujemanje katerega koli priloženega znaka. SELECT * FROM `movies` WHERE` title` REGEXP '[vwxyz]'; bo dal vse filme, ki vsebujejo kateri koli en znak v "vwxyz". Na primer, Moški X, Da Vincijeva koda itd.
[abc] Seznam znakov [abc] se uporablja za ujemanje vseh znakov, razen priloženih. SELECT * FROM `movies` WHERE` title` REGEXP '[vwxyz]'; bo dal vse filme, ki vsebujejo znake, razen tistih v "vwxyz".
[AZ] [AZ] se uporablja za ujemanje z veliko črko. SELECT * FROM `members` WHERE` postal_address` REGEXP '[AZ]'; bo dal vsem članom, ki imajo poštni naslov, ki vsebuje kateri koli znak od A do Ž ... Na primer, Janet Jones s člansko številko 1.
[az] [Az] se uporablja za povezovanje vsako črko SELECT * FROM `members` WHERE` postal_address` REGEXP '[az]'; bo dal vsem članom, ki imajo poštne naslove, ki vsebujejo kateri koli znak od a do z ... Na primer Janet Jones s člansko številko 1.
[0-9] [0-9] se uporablja za ujemanje številko od 0 do 9. SELECT * FROM `members` WHERE` contact_number` REGEXP '[0-9]' bo vsem članom predložil kontaktne številke, ki vsebujejo znake "[0-9]". Na primer, Robert Phil.
^ Strešica (^) se uporablja za zagon tekmo na začetku. SELECT * FROM `movies` WHERE` title` REGEXP '[cd]'; daje vse filme z naslovom, ki se začne s katerim koli znakom v "cd". Na primer Code Name Black, Daddy's Little Girls in Da Vinci Code.
| Navpična vrstica (|), se uporablja za izolacijo alternativ. SELECT * FROM `movies` WHERE` title` REGEXP '[cd] | [u]'; daje vse filme z naslovom, ki se začne s katerim koli znakom v "cd" ali "u". Na primer Code Name Black, Daddy's Little Girl, Da Vincijeva koda in Underworld - Awakening.
[[: <:]] [[: <:]] Se ujema z začetkom besed. SELECT * FROM `movies` WHERE` title` REGEXP '[[: <:]] for'; daje vse filme z naslovi, ki se začnejo z liki. Na primer: Pozaba na Saro Maršal.
[[:>:]] [[:>:]] Se ujema s koncem besed. SELECT * FROM `movies` WHERE` title` REGEXP 'ack [[:>:]]'; daje vse filme z naslovi, ki se končajo z znaki "ack". Na primer Code Name Black.
[: razred:] [: Razred:] ujema razred znakov, in sicer [: alpha:], da ustrezajo črke, [: space:], da se ujemajo presledke, [: punct:] je ločila tekem in [: zgornja:] za zgornji razred črkami. SELECT * FROM `movies` WHERE` title` REGEXP '[: alpha:]'; daje, da vsi filmi z naslovi vsebujejo samo črke. Na primer, Pozabi Sarah Marshal, Možje X itd. Ta film ne bo izpustil filma, kot so Pirati s Karibov 4

Poševnica nazaj (\) se uporablja kot ubežni znak. Če ga želimo uporabiti kot del vzorca v regularnem izrazu, moramo uporabiti dvojne poševnice nazaj (\\)

Povzetek

  • Regularni izrazi zagotavljajo močno in prilagodljivo ujemanje vzorcev, ki nam lahko pomaga uvesti pripomočke za iskanje moči za naše sisteme baz podatkov.
  • REGEXP je operator, ki se uporablja pri izvajanju ujemanj vzorcev regularnih izrazov. RLIKE je sopomenka
  • Regularni izrazi podpirajo številne metaznake, ki omogočajo večjo prilagodljivost in nadzor pri izvajanju ujemanj vzorcev.
  • Poševnica nazaj se uporablja kot ubežni znak v regularnih izrazih. Pri ujemanju vzorca se upošteva le, če so bile uporabljene dvojne poševnice nazaj.
  • Regularni izrazi ne razlikujejo med velikimi in malimi črkami.