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.

Napi Guru99 hírlevél

Kezdje a napját a legfrissebb és legfontosabb mesterséges intelligenciával kapcsolatos hírekkel, amelyeket azonnal kézbesítünk.