MYSQL reguláris kifejezések (REGEXP) a szintaxissal & Példák

Anonim

Melyek a reguláris kifejezések?

A reguláris kifejezések segítenek az összetett feltételeknek megfelelő adatok keresésében. Az előző bemutatóban helyettesítő karaktereket néztünk meg. Ha korábban már helyettesítő karakterekkel dolgozott, akkor felteszi a kérdést, hogy miért tanuljon meg reguláris kifejezéseket, amikor hasonló helyeket kaphat a helyettesítő karakterek használatával. Mivel a helyettesítő karakterekhez képest a reguláris kifejezések lehetővé teszik számunkra, hogy még bonyolultabb kritériumoknak megfelelő adatokat keressünk.

Alapszintaktika

A reguláris kifejezés alapvető szintaxisa a következő

SELECT statements… WHERE fieldname REGEXP 'pattern';

ITT -

  • A "SELECT utasítások ..." a szokásos SELECT utasítás
  • A "WHERE fieldname" annak az oszlopnak a neve, amelyen a reguláris kifejezést el kell végezni.
  • "REGEXP 'minta'" A REGEXP a reguláris kifejezés operátora, a 'pattern' pedig a REGEXP által egyeztetendő mintát jelöli. RLIKE a szinonimája REGEXP és képes ugyanazt az eredményt, mint REGEXP. Annak elkerülése érdekében, hogy összetévessze a LIKE operátorral, jobb , ha inkább a REGEXP-t használja.

Most nézzünk meg egy gyakorlati példát-

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

A fenti lekérdezés az összes olyan filmcímre keres, 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 van-e. Mindaddig, amíg a cím tartalmazza, akkor figyelembe vesszük.

Tegyük fel, hogy olyan filmeket akarunk keresni, amelyek a, b, c vagy d betűkkel kezdődnek, majd tetszőleges számú karaktert követnek, hogyan érnénk el ezt. Használhatunk reguláris kifejezést a metakarakterekkel együtt a kívánt eredmények eléréséhez.

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

A fenti parancsfájl futtatása a MySQL munkapadban a myflixdb fájlhoz a következő eredményeket adja.

 
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 alaposan a fenti eredményért felelős reguláris kifejezésünket.

'[abcd]' a caret (^) azt jelenti, hogy az elején a mintaillesztést kell alkalmazni, a charlist [abcd] pedig azt, hogy az eredménysorozatunkban csak az a, b, c vagy d kezdetű filmcímek kerülnek visszaadásra.

Módosítsuk a fenti szkriptünket, és használjuk a NOT charlistet, és nézzük meg, milyen eredményeket fogunk elérni a lekérdezés végrehajtása után.

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

A fenti parancsfájl futtatása a MySQL munkapadban a myflixdb fájlhoz 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

Vizsgáljuk meg most alaposan a fenti eredményekért felelős reguláris kifejezésünket.

A '[abcd]' a caret (^) azt jelenti, hogy a minta egyezést kell alkalmazni az elején, a charlist [abcd] pedig azt, hogy a mellékelt karakterekkel kezdődő filmcímek kizárásra kerülnek az eredményhalmazból.

Rendszeres kifejezés metakarakterek

Amit a fenti példában megnéztünk, az a reguláris kifejezés legegyszerűbb formája. Most nézzük meg a fejlettebb reguláris kifejezésminta-egyezéseket. Tegyük fel, hogy a "kód" mintával kezdődő filmcímeket csak reguláris kifejezéssel szeretnénk keresni, hogyan folytatnánk? A válasz metakarakterek. Ezek lehetővé teszik számunkra, hogy a szokásos kifejezések segítségével finomhangoljuk a keresési eredményeket.

Char Leírás Példa
* A csillag (*) metakarakter az előtte lévő karakterláncok nulla (0) vagy több példányának egyezésére szolgál SELECT * FROM filmekből WHERE cím REGEXP 'da *'; minden filmet "da" karaktert tartalmaz. Például Da Vinci kód, Apu kislányai.
+ A plusz (+) metakarakter az előtte lévő karakterláncok egy vagy több példányának megfeleltetésére szolgál. SELECT * FROM `filmek'HOL` cím` REGEXP 'mon +'; minden karaktert tartalmazó filmet "mon" -ként ad meg. Például: Angyalok és démonok.
? A (?) Metakaraktert nulla (0) vagy az azt megelőző karakterláncok egyik példányának egyezésére használják. SELECT * FROM `categories` WHERE` category_name` REGEXP 'com?'; megadja az összes karakterláncot tartalmazó kategóriát. Például vígjáték, romantikus vígjáték.
. A pont (.) Metakarakter bármely új karakter kivételével bármely karakterhez illeszkedik. SELECT * FROM filmekből WHERE `year_released` REGEXP '200.'; megadja az összes olyan filmet, amely megjelent az évek során, kezdve a "200" karakterrel, majd bármelyik karakterrel. Például: 2005, 2007, 2007 stb.
[ABC] A charlist [abc] a mellékelt karakterek bármelyikének megfeleltetésére szolgál. SELECT * FROM `filmek'HOL` cím` REGEXP '[vwxyz]'; megadja az összes filmet, amely egyetlen karaktert tartalmaz a "vwxyz" -ban. Például: X-Men, Da Vinci Code stb.
[abc] A charlist [abc] minden karakter egyeztetésére szolgál, kivéve a mellékelt karaktereket. SELECT * FROM `filmek'HOL` cím` REGEXP '[vwxyz]'; megadja az összes olyan filmet, amely a "vwxyz" karakterektől eltérő karaktereket tartalmaz.
[AZ] Az [AZ] bármely nagybetűvel megegyezik. SELECT * FROM `tagok 'WHERE` postal_cím `REGEXP' [AZ] '; megadja azokat a tagokat, akiknek postai címe bármilyen karaktert tartalmaz A-tól Z-ig. Például Janet Jones az 1. tagsággal.
[az] Az [az] bármely kisbetû megfeleltetésére szolgál SELECT * FROM `tagok 'WHERE` postal_cím `REGEXP' [az] '; megadja azokat a tagokat, akiknek postacímük bármilyen karaktert tartalmaz a-tól z-ig. Például Janet Jones 1. tagsággal.
[0–9] A [0-9] bármely 0 és 9 közötti számjegy egyezésére szolgál. A SELECT * FROM `tagok'HOL A` contact_number` REGEXP '[0-9]' megadja az összes olyan tagnak, aki beküldte a "[0-9]" karaktereket tartalmazó kapcsolattartási számokat. Például Robert Phil.
^ A caret (^) a meccs kezdetére szolgál. SELECT * FROM `filmek'HOL` cím` REGEXP '[cd]'; megadja az összes filmet, amelynek címe a "cd" bármelyik karakterével kezdődik. Például: Fekete kódnév, Apa kislányai és a Da Vinci-kód.
| A függőleges sáv (|) az alternatívák elkülönítésére szolgál. SELECT * FROM `filmek'HOL` 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: Fekete kódnév, Apa kislánya, Da Vinci kód és az Alvilág - Ébredés.
[[: <:]] A [[: <:]] egyezik a szavak elejével. SELECT * FROM `filmek'HOL` cím` REGEXP '[[: <:]] for'; az összes filmet karakterekkel kezdődő címmel adja meg. Például: Sarah marsall elfelejtése.
[[:>:]] A [[:>:]] egyezik a szavak végével. SELECT * FROM `filmek'HOL` cím` REGEXP 'ack [[:>:]]'; az összes filmet "ack" karakterekkel végződő címmel látja el. Például: Fekete kódnév.
[:osztály:] A [: class:] egy karakterosztályhoz illeszkedik, azaz az [: alfa:] a betűkhöz, a [: szóköz:] a szóközhöz, a [: punct:] az írásjelek és a [: felső:] a felsőbb osztályú betűkhöz. SELECT * FROM `filmek'HOL` cím` REGEXP '[: alfa:]'; az összes címû film csak betûket tartalmaz. Például: Sarah Marshal, X-Men stb. elfelejtése Ez a lekérdezés elhagyja az olyan filmeket, mint a Karib-tenger kalózai 4.

A visszavágás (\) menekülési karakterként szokott használni. Ha a minta részeként szeretnénk használni egy reguláris kifejezésben, akkor kettős visszavonást (\\) kell használnunk

Összegzés

  • A rendszeres kifejezések hatékony és rugalmas mintamegfelelést nyújtanak, amely segítséget nyújthat az energiakereső segédprogramok megvalósításában az adatbázis-rendszereinkben.
  • A REGEXP az a operátor, amelyet a reguláris kifejezésminta-egyezések végrehajtásakor használnak. A RLIKE a szinonimája
  • A rendszeres kifejezések számos metakaraktert támogatnak, amelyek nagyobb rugalmasságot és irányítást tesznek lehetővé a mintaillesztések végrehajtása során.
  • A hátsó perjelet menekülési karakterként használják a reguláris kifejezésekben. Csak akkor veszi figyelembe a mintameccs, ha kettős visszavágást használtak.
  • A reguláris kifejezések nem különböztetik meg a kis- és nagybetűket.