MYSQLi regulaaravaldised (REGEXP) koos süntaksiga & Näited

Anonim

Mis on regulaaravaldised?

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

Põhisüntaks

Regulaaravaldise põhisüntaks on järgmine

SELECT statements… WHERE fieldname REGEXP 'pattern';

SIIN -

  • "SELECT-laused ..." on standardne SELECT-lause
  • "WHERE fieldname" on selle veeru nimi, millele regulaaravaldis tuleb esitada.
  • "REGEXP 'muster" " REGEXP on regulaaravaldise operaator ja" muster "tähistab mustrit, millele REGEXP peab sobitama. RLIKE on REGEXPi sünonüüm ja saavutab samad tulemused kui REGEXP. Et seda segi ajada operaatoriga LIKE, on parem kasutada selle asemel REGEXP-i .

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 tähtis, kas "kood" on pealkirja alguses, keskel või lõpus. Niikaua kui see sisaldub pealkirjas, kaalutakse seda.

Oletame, et tahame otsida filme, mis algavad tähega a, b, c või d, millele järgneb mis tahes arv muid tähemärke, kuidas me selle saavutaksime. Soovitud tulemuste saavutamiseks saame kasutada regulaarset väljendit koos metamärkidega.

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

Ülaltoodud skripti käivitamine MySQL-i töölaual myflixdb-ga 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 regulaarset väljendit, mis vastutab ülaltoodud tulemuse eest.

'[abcd]' märk (^) tähendab, et alguses tuleks rakendada mustrivastet ja charlist [abcd] tähendab, et meie tulemuskomplektis tagastatakse ainult a, b, c või d algavad filmide pealkirjad.

Muutkem oma ülaltoodud skripti ja kasutage EI loendit ning vaadake, milliseid tulemusi saame pärast päringu täitmist.

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

Ülaltoodud skripti käivitamine MySQL-i töölaual myflixdb-ga 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]' märkmik (^) tähendab, et mustri vaste tuleks rakendada alguses ja charlist [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 vaatasime, on regulaaravaldise lihtsaim vorm. Vaatame nüüd täpsema regulaaravaldise mustri vasteid. Oletame, et tahame mustri "koodiga" algavaid filmi pealkirju otsida ainult regulaaravaldise abil, kuidas me sellega edasi läheksime? Vastus on metamärgid. Need võimaldavad meil mustriotsingu tulemusi tavaliste avaldiste abil täpsustada.

Char Kirjeldus Näide
* Tärn (*) metacharacter kasutatakse tabab null (0) või enamal stringid sellele eelnev VALI * FROM filmidest WHERE pealkiri REGEXP 'da *'; annab kõik filmid, mis sisaldavad märke "da" .Niteks Da Vinci kood, Daddy's Little Girls.
+ Pluss (+) metacharacter kasutatakse tabab ühe või mitme juhtumeid stringid eelnevale ta. VALI * FROM "filmidest" WHERE "pealkiri" REGEXP "mon +"; annab kõigile filmidele, mis sisaldavad tähemärke, "es". Näiteks "Inglid ja deemonid".
? Küsimuse (?) Metamärki kasutatakse nulli (0) või sellele eelnevate stringide ühe eksemplari sobitamiseks. VALI * FROM `kategooriatest 'WHERE` kategooria_nimi `REGEXP' com? '; annab kõik kategooriad, mis sisaldavad stringi com. Näiteks komöödia, romantiline komöödia.
. Punkti (.) Metamärki kasutatakse mis tahes üksiku märgi sobitamiseks, välja arvatud uus rida. VALI * FROM filmidest WHERE `aasta_released` REGEXP '200.'; annab välja kõik filmid, mis on aastate jooksul välja antud tähtedega "200", millele järgneb üksik märk. Näiteks 2005, 2007, 2007 jne.
[abc] Charlist [abc] kasutatakse sobi ühegi suletud tähemärki. VALI * FROM `filmidest` WHERE `pealkiri` REGEXP '[vwxyz]'; annab kõik filmid, mis sisaldavad ükskõik millist märki "vwxyz" -is. Näiteks X-Men, Da Vinci kood jne.
[abc] Charlist [abc] kasutatakse vastanud ühtegi märki va need suletud. VALI * FROM `filmidest 'WHERE` pealkiri `REGEXP' [vwxyz] '; annab kõik filmid, mis sisaldavad muid tähemärke kui need, mis on tähises "vwxyz".
[AZ] [AZ] kasutatakse vastanud ühtegi suurtäht. VALI * FROM `liikmetest 'WHERE` postiaadress `REGEXP' [AZ] '; annab kõigile liikmetele, kellel on postiaadress, mis sisaldab tähti A – Z… Näiteks Janet Jones koos liikmenumbriga 1.
[az] [Az] kasutatakse vastanud ühtegi väiketäht VALI * FROM `liikmetest 'WHERE` postiaadress `REGEXP' [az] '; annab kõigile liikmetele, kellel on postiaadress, mis sisaldab mis tahes tähemärki a kuni z ... Näiteks Janet Jones liikmenumbriga 1.
[0–9] [0-9] kasutatakse vastanud ühtegi numbrit vahemikus 0 kuni 9. VALI * FROM `liikmetest 'KUS` kontakti_number `REGEXP' [0-9] 'annab kõigile liikmetele, kes on esitanud kontaktnumbrid, mis sisaldavad märke" [0-9] ". Näiteks Robert Phil.
^ Katus (^) kasutatakse, et alustada mängu juures algab. VALI * FROM `filmidest 'WHERE` pealkiri `REGEXP' [cd] '; annab kõik filmid pealkirjaga, mis algab tähe "cd" ükskõik millise tähemärgiga. Näiteks Koodinimi Black, Daddy's Little Girls ja Da Vinci Code.
| Vertikaalne riba (|) kasutatakse isolaat alternatiive. VALI * FROM `filmidest` WHERE `pealkiri` REGEXP '[cd] | [u]'; annab kõik filmid pealkirjaga, mis algab tähemärki tähtedega "cd" või "u". Näiteks Koodinimi Black, Daddy's Little Girl, Da Vinci Code ja Underworld - Awakening.
[[: <:]] [[: <:]] Paarilised alguses sõnu. VALI * FROM "filmidest" WHERE "pealkiri" REGEXP "[[: <:]] for '; annab kõigile filmidele pealkirjad, mis algavad tähemärkidega. Näiteks: Sarah marssali unustamine.
[[:>:]] [[:>:]] Paarilised sõnade lõpus. VALI * FROM `filmidest` WHERE `pealkiri` REGEXP 'ack [[:>:]]'; annab kõigile filmidele pealkirja, mis lõpeb tähemärgiga "ack" .Näiteks Koodinimi Must.
[: klass:] [: Klass:] vastab märgiklass st [alfa:] sobitada tähed, [: space:] sobitada valge ruumi, [: punct:] on mängu kirjavahemärke ja [: upper:] jaoks kõrgklassi tähed. VALI * FROM `filmidest` WHERE `pealkiri` REGEXP '[: alfa:]'; annab kõigile filmidele, mille pealkirjad sisaldavad ainult tähti. Näiteks päringust jäetakse välja Sarah Marshal, X-Men jne unustamine. Sellised filmid nagu Kariibi mere piraadid 4

Tagasi kaldkriipsu (\) kasutatakse põgenemismärgina. Kui me tahame seda kasutada regulaaravaldises mustri osana, peaksime kasutama topelt tagasilööke (\\)

Kokkuvõte

  • Regulaaravaldised pakuvad tugevat ja paindlikku mustrivastet, mis aitab meil juurutada oma andmebaasisüsteemide energiaotsingu utiliite.
  • REGEXP on operaator, mida kasutatakse regulaaravaldise mustrivastete teostamisel. RLIKE on sünonüüm
  • Regulaaravaldised toetavad mitut metamärki, mis võimaldavad mustrivastete teostamisel suuremat paindlikkust ja kontrolli.
  • Tagasilööki kasutatakse regulaaravaldistes põgenemismärgina. Seda võetakse mustrivastes arvesse ainult siis, kui on kasutatud topeltkriipsu.
  • Regulaaravaldised ei ole tõstutundlikud.