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.