MYSQL-i regulaaravaldised (REGEXP) koos süntaksi ja näidetega

Mis on regulaaravaldised?

Regulaaravaldised aitavad otsida keerulistele kriteeriumidele vastavaid andmeid. Vaatasime eelmises õpetuses metamärke. Kui olete metamärkidega varem töötanud, võite küsida, miks õppida regulaaravaldisi, kui metamärke kasutades saate sarnaseid tulemusi. Sest võrreldes metamärkidega võimaldavad regulaaravaldised meil otsida andmeid, mis vastavad veelgi keerukamatele kriteeriumidele.

Põhiline süntaks

Regulaaravaldise põhisüntaks on järgmine

SELECT statements... WHERE fieldname REGEXP 'pattern';

SIIN –

  • „VALI avaldused…” on standard SELECT avaldus
  • „WHERE väljanimi” on veeru nimi, millel regulaaravaldist teostatakse.
  • "REGEXP muster" REGEXP on regulaaravaldise operaator ja 'muster' tähistab mustrit, millele REGEXP sobitab. RLIKE on REGEXP sünonüüm ja saavutab samad tulemused kui REGEXP. Vältimaks selle segi ajamist LIKE-operaatoriga, on see parem kasutada REGEXP-i asemel.

Vaatame nüüd praktilist näidet -

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

Ülaltoodud päring otsib kõiki filmi pealkirju, milles on sõna kood. Pole vahet, kas “kood” on pealkirja alguses, keskel või lõpus. Niikaua kui see pealkirjas sisaldub, võetakse seda arvesse.

Oletame, et tahame otsida filme, mis algavad tähega a, b, c või d, millele järgneb suvaline arv teisi tegelasi, kuidas me selleni jõuaksime. Soovitud tulemuste saavutamiseks saame kasutada regulaaravaldist koos metamärkidega.

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

Ülaltoodud skripti käivitamine MySQL töölaud myflixdb vastu annab meile järgmised tulemused.

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

Vaatame nüüd lähemalt meie regulaaravaldist, mis vastutab ülaltoodud tulemuse eest.

'^[abcd]' tähis (^) tähendab, et mustrivaste tuleks rakendada alguses ja täheloend [abcd] tähendab, et meie tulemuste komplektis tagastatakse ainult filmide pealkirjad, mis algavad tähega a, b, c või d.

Muudame oma ülaltoodud skripti ja kasutame NOT charlisti ning vaatame, milliseid tulemusi me pärast päringu täitmist saame.

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

Ülaltoodud skripti käivitamine MySQL töölaud myflixdb vastu annab meile järgmised tulemused.

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

Vaatame nüüd lähemalt meie regulaaravaldist, mis vastutab ülaltoodud tulemuste eest.

'^[^abcd]' tähis (^) tähendab, et mustrivaste tuleks rakendada alguses ja täheloend [^abcd] tähendab, et filmi pealkirjad, mis algavad mis tahes lisatud tähemärgiga, jäetakse tulemuste komplektist välja.

Regulaaravaldise metamärgid

See, mida me ülaltoodud näites vaatlesime, on regulaaravaldise lihtsaim vorm. Vaatame nüüd täpsemaid regulaaravaldise mustrite vasteid. Oletame, et tahame otsida filmide pealkirju, mis algavad mustriga "kood", kasutades ainult regulaaravaldist, siis kuidas me sellega tegeleksime? Vastus on metategelased. Need võimaldavad meil regulaaravaldiste abil mustrite otsingutulemusi peenhäälestada.

Char Kirjeldus Näide
* . tärn (*) metamärki kasutatakse sellele eelnevate stringide nulli (0) või enama eksemplari vastendamiseks SELECT * FROM filmidest WHERE pealkiri REGEXP 'da*'; annab kõik filmid, mis sisaldavad tegelasi "da". Näiteks Da Vinci kood , Daddy's Little Girls.
+ . pluss (+) metamärki kasutatakse ühe või mitme sellele eelneva stringi eksemplari sobitamiseks. SELECT * FROM `filmid` WHERE `pealkiri` REGEXP 'esm+'; annab kõigile filmidele, mis sisaldavad tegelasi "mon". Näiteks Inglid ja deemonid.
? Küsimus(?) metamärki kasutatakse sellele eelnevate stringide nulli (0) või ühe eksemplari vastendamiseks. SELECT * FROM `kategooriad` WHERE `kategooria_nimi` REGEXP 'com?'; annab kõik kategooriad, mis sisaldavad stringi com .Näiteks komöödia , romantiline komöödia .
. . punkt (.) metamärki kasutatakse mis tahes üksiku märgi sobitamiseks, välja arvatud uus rida. SELECT * FROM filmidest WHERE `aasta_välja antud` REGEXP '200.'; annab kõik aastatel välja antud filmid, mis algavad tegelaskujuga "200", millele järgneb mõni üksik tegelane. Näiteks 2005,2007,2008 jne.
[ABC] . charlist [abc] kasutatakse mis tahes lisatud tähemärgi sobitamiseks. SELECT * FROM `filmid` WHERE `pealkiri` REGEXP '[vwxyz]'; annab kõik filmid, mis sisaldavad ühtki tegelast "vwxyz". Näiteks X-Mehed, Da Vinci kood jne.
[^abc] . charlist [^abc] kasutatakse mis tahes märkide sobitamiseks, välja arvatud lisatud märgid. SELECT * FROM `filmidest` WHERE `pealkiri` REGEXP '^[^vwxyz]'; annab kõik filmid, mis sisaldavad muid tegelasi peale "vwxyz" omade.
[AZ] . [AZ] kasutatakse mis tahes suurtähe sobitamiseks. SELECT * FROM `liikmed` WHERE `postiaadress` REGEXP '[AZ]'; annab kõigile liikmetele, kelle postiaadress sisaldab mis tahes märki A-st Z-ni. Näiteks Janet Jones liikmenumbriga 1.
[az] . [az] kasutatakse mis tahes väiketähte sobitamiseks SELECT * FROM `liikmed` WHERE `postiaadress` REGEXP '[az]'; annab kõigile liikmetele, kelle postiaadress sisaldab mis tahes märki a-st z-ni. Näiteks Janet Jones liikmenumbriga 1.
[0-9] . [0-9] kasutatakse mis tahes numbri 0 kuni 9 sobitamiseks. SELECT * FROM "liikmed" WHERE "kontakti_number" REGEXP "[0-9]" annab kõigile liikmetele kontaktnumbrid, mis sisaldavad märke "[0-9]". Näiteks Robert Phil.
^ . hoop (^) kasutatakse matši algusest alustamiseks. SELECT * FROM `filmidest` WHERE `pealkiri` REGEXP '^[cd]'; annab kõik filmid pealkirjaga, mis algab mis tahes tegelaskujuga "cd"-l. Näiteks koodnimi Black, Daddy's Little Girls ja Da Vinci kood.
| . vertikaalne riba (|) kasutatakse alternatiivide eraldamiseks. SELECT * FROM `filmidest` WHERE `pealkiri` REGEXP '^[cd]|^[u]'; annab kõikidele filmidele pealkirjad, mis algavad mis tahes tähemärgiga "cd" või "u" . Näiteks koodnimi Black, Daddy's Little Girl, Da Vinci kood ja Underworld – Awakening.
[[:<:]] .[[:<:]] sobib sõnade algusega. SELECT * FROM `filmid` WHERE `pealkiri` REGEXP '[[:<:]]for';

annab kõik filmid pealkirjadega, mis algavad tegelastega. Näiteks: Sarah Marshali unustamine.

[[:>:]] . [[:>:]] sobib sõnade lõppu. SELECT * FROM `filmid` WHERE `pealkiri` REGEXP 'ack[[:>:]]';

annab kõik filmid pealkirjadega, mis lõpevad tähemärkidega "ack"

.Näiteks koodnimi must.

[:klass:] . [:klass:] sobib märgiklassiga st

[:alpha:] tähti sobitama, [:tühik:] sobitada tühikuid, [:punkt:] on sobitada kirjavahemärke ja [:upper:] kõrgema klassi tähtede jaoks.

SELECT * FROM `filmid` WHERE `pealkiri` REGEXP '[:alpha:]';

annab kõikidele filmidele, mille pealkirjad sisaldavad ainult tähti

Näiteks Sarah Marshali unustamine, X-Mehed jne.

Sellised filmid nagu Kariibi mere piraadid 4 jäetakse sellest päringust välja.

Kaldkriipsu (\) kasutatakse paomärgina. Kui tahame seda kasutada regulaaravaldises mustri osana, peaksime kasutama topeltkaldkriipsu (\\)

kokkuvõte

  • Regulaaravaldised pakuvad võimsat ja paindlikku mustrite vastet, mis aitab meil rakendada meie andmebaasisüsteemides võimsaid otsinguutiliite.
  • REGEXP on operaator, mida kasutatakse regulaaravaldise mustrite vastete tegemisel. RLIKE on sünonüüm
  • Regulaaravaldised toetavad mitmeid metamärke, mis võimaldavad mustrite vastendamisel suuremat paindlikkust ja kontrolli.
  • Pöördkaldkriipsu kasutatakse regulaaravaldistes paomärgina. Seda võetakse mustrimängus arvesse ainult siis, kui on kasutatud topeltkaldkriipsu.
  • Regulaaravaldised ei ole tõstutundlikud.