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.