MYSQL reguláris kifejezések (REGEXP) szintaxissal és példákkal
Mik azok a reguláris kifejezések?
A reguláris kifejezések segítenek az összetett feltételeknek megfelelő adatok keresésében. Az előző oktatóanyagban megnéztük a helyettesítő karaktereket. Ha korábban már dolgozott helyettesítő karakterekkel, felteheti a kérdést, hogy miért tanuljon meg reguláris kifejezéseket, ha hasonló eredményeket kaphat a helyettesítő karakterek használatával. Mert a helyettesítő karakterekhez képest a reguláris kifejezések lehetővé teszik, hogy még összetettebb kritériumoknak megfelelő adatokban keressünk.
Alapszintaxis
A reguláris kifejezés alapvető szintaxisa a következő
SELECT statements... WHERE fieldname REGEXP 'pattern';
ITT -
- „SELECT utasítások…” a szabvány SELECT utasítás
- „WHERE mezőnév” annak az oszlopnak a neve, amelyen a reguláris kifejezést végre kell hajtani.
- „REGEXP 'minta'” A REGEXP a reguláris kifejezés operátora, a 'minta' pedig a REGEXP által egyeztetendő mintát jelöli. RLIKE a a REGEXP szinonimája és ugyanazokat az eredményeket éri el, mint a REGEXP. Hogy ne tévessze össze a LIKE operátorral, azt jobb a REGEXP használata helyette.
Nézzünk most egy gyakorlati példát
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
A fenti lekérdezés megkeresi az összes olyan filmcímet, amelyben szerepel a szókód. Nem számít, hogy a „kód” a cím elején, közepén vagy végén található. Amíg a címben szerepel, addig figyelembe vesszük.
Tegyük fel, hogy olyan filmeket akarunk keresni, amelyek a, b, c vagy d betűkkel kezdődnek, és utána tetszőleges számú karakter következik, hogyan tudnánk ezt elérni. A kívánt eredmény eléréséhez használhatunk egy reguláris kifejezést a metakarakterekkel együtt.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
A fenti szkript végrehajtása MySQL munkapad A myflixdb ellen a következő eredményeket kapjuk.
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 |
Most nézzük meg közelebbről a fenti eredményért felelős reguláris kifejezésünket.
A '^[abcd]' a caret (^) azt jelenti, hogy a mintaegyezést kell alkalmazni az elején, az [abcd] karakterlista pedig azt, hogy csak az a, b, c vagy d betűkkel kezdődő filmcímek jelennek meg az eredményhalmazunkban.
Módosítsuk a fenti szkriptünket, és használjuk a NOT karakterlistát, és nézzük meg, milyen eredményeket kapunk a lekérdezés végrehajtása után.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
A fenti szkript végrehajtása MySQL munkapad a myflixdb ellen a következő eredményeket adja.
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 |
Most nézzük meg közelebbről a fenti eredményekért felelős reguláris kifejezésünket.
A '^[^abcd]' a caret (^) azt jelenti, hogy a mintaegyezést kell alkalmazni az elején, a karakterlista [^abcd] pedig azt, hogy a mellékelt karakterek bármelyikével kezdődő filmcímek ki vannak zárva az eredményhalmazból.
Reguláris kifejezés metakarakterei
Amit a fenti példában megnéztünk, az a reguláris kifejezés legegyszerűbb formája. Nézzük most a speciálisabb reguláris kifejezésminta egyezéseket. Tegyük fel, hogy olyan filmcímeket akarunk keresni, amelyek a „kód” mintával kezdődnek, csak egy reguláris kifejezés használatával, hogyan csinálnánk? A válasz a metakarakterek. Lehetővé teszik, hogy reguláris kifejezések segítségével finomhangoljuk a minta keresési eredményeit.
Faszén | Leírás | Példa | |
---|---|---|---|
* | A csillag (*) A metakarakter az őt megelőző karakterlánc nulla (0) vagy több példányának egyeztetésére szolgál | SELECT * FROM filmek WHERE cím REGEXP 'da*'; minden olyan filmet tartalmaz, amelyek „da” karaktereket tartalmaznak. Például a Da Vinci-kód, a Daddy's Little Girls. | |
+ | A plusz (+) A metakarakter az őt megelőző karakterlánc egy vagy több példányának egyeztetésére szolgál. | SELECT * FROM `filmek` WHERE `cím` REGEXP 'h+'; minden olyan filmet tartalmaz, amely „mon” karaktereket tartalmaz. Például Angyalok és démonok. | |
? | A kérdés(?) A metakarakter nulla (0) vagy az azt megelőző karakterláncok egy példányának egyeztetésére szolgál. | SELECT * FROM `categories` WHERE `kategória_neve` REGEXP 'com?'; a com karakterláncot tartalmazó összes kategóriát megadja. Például vígjáték , romantikus vígjáték . | |
. | A pont (.) A metakarakter bármely egyedi karakterhez illeszkedik, egy új sor kivételével. | SELECT * FROM filmek WHERE `year_released` REGEXP '200.'; az évek során megjelent összes filmet a „200” karakterekkel kezdődően tartalmazza, majd bármelyik karaktert követi. Például 2005,2007,2008, XNUMX, XNUMX stb. | |
[ABC] | A charlist [abc] a mellékelt karakterek bármelyikének megfeleltetésére szolgál. | SELECT * FROM `filmek` WHERE `cím` REGEXP '[vwxyz]'; a „vwxyz” karaktereket tartalmazó összes filmet megadja. Például az X-Men, a Da Vinci-kód stb. | |
[^abc] | A charlist [^abc] a mellékelt karakterek kivételével a karakterek egyeztetésére szolgál. | SELECT * FROM `filmek` WHERE `cím` REGEXP '^[^vwxyz]'; a „vwxyz”-ben szereplőktől eltérő karaktereket tartalmazó összes filmet megadja. | |
[AZ] | A [AZ] bármely nagybetű egyeztetésére szolgál. | SELECT * FROM `tagok` WHERE `postai_cím` REGEXP '[AZ]'; megadja az összes tagot, akinek postacíme A-tól Z-ig bármilyen karaktert tartalmaz. .Például Janet Jones 1-es tagsági számmal. | |
[az] | A [az] bármely kisbetű megfelelésére szolgál | SELECT * FROM `tagok` WHERE `postai_cím` REGEXP '[az]'; megadja az összes olyan tagot, amelynek postacíme a-tól z-ig bármilyen karaktert tartalmaz. .Például Janet Jones 1-es tagsági számmal. | |
[0-9] | A [0-9] a 0 és 9 közötti számjegyek egyeztetésére szolgál. | SELECT * FROM "tagok" WHERE "kapcsolati_szám" REGEXP "[0-9]" minden tagnak megadja a „[0-9]” karaktereket tartalmazó telefonszámot. Például Robert Phil. | |
^ | A törpe (^) A mérkőzés elején kezdődik. | SELECT * FROM `filmek` WHERE `cím` REGEXP '^[cd]'; megadja az összes filmet úgy, hogy a cím a „cd” bármelyik szereplőjével kezdődik. Például a Black Code Name, a Daddy's Little Girls és a Da Vinci Code. | |
| | A függőleges sáv (|) alternatívák elkülönítésére használják. | SELECT * FROM `filmek` WHERE `cím` REGEXP '^[cd]|^[u]'; megadja az összes filmet, amelynek címe a „cd” vagy „u” karakterek bármelyikével kezdődik. Például a kódnév Black, a Daddy's Little Girl, a Da Vinci-kód és az Underworld – AwakenIng. | |
[[:<:]] | A[[:<:]] megegyezik a szavak elejével. | SELECT * FROM `filmek` WHERE `cím` REGEXP '[[:<:]]for';
megadja az összes filmet a karakterekkel kezdődő címekkel. Például: Sarah Marshal elfelejtése. |
|
[[:>:]] | A [[:>:]] megegyezik a szavak végével. | SELECT * FROM `filmek` WHERE `cím` REGEXP 'ack[[:>:]]';
az összes filmet „ack” karakterrel végződő címekkel adja meg .Például Kódnév Fekete. |
|
[:osztály:] | A [:osztály:] megfelel egy karakterosztálynak pl
[:alpha:] betűket párosítani, [:hely:] hogy illeszkedjen a szóközhöz, [:pont:] az írásjelek és a [:upper:] a felső osztályú betűk esetében. |
SELECT * FROM `filmek` WHERE `cím` REGEXP '[:alpha:]';
minden olyan filmet megad, amelynek címe csak betűket tartalmaz .Például Sarah Marshal elfelejtése, X-Men stb. A Karib-tenger kalózai 4-hez hasonló filmek kimaradnak ebből a lekérdezésből. |
A fordított perjel (\) escape karakterként használatos. Ha a minta részeként szeretnénk használni egy reguláris kifejezésben, használjunk dupla fordított perjelet (\\)
Összegzésként
- A reguláris kifejezések hatékony és rugalmas mintaegyeztetést biztosítanak, amely segíthet hatékony keresési segédprogramok megvalósításában adatbázisrendszereink számára.
- A REGEXP a reguláris kifejezés-mintaegyeztetések végrehajtásakor használt operátor. Az RLIKE a szinonimája
- A reguláris kifejezések számos metakarakter használatát támogatják, amelyek nagyobb rugalmasságot és szabályozást tesznek lehetővé a mintaegyeztetések végrehajtása során.
- A fordított perjelet escape karakterként használják a reguláris kifejezésekben. Csak akkor veszi figyelembe a mintaegyeztetésben, ha dupla fordított perjelet használtak.
- A reguláris kifejezések nem különböztetik meg a kis- és nagybetűket.