Čo sú regulárne výrazy?
Regulárne výrazy pomáhajú vyhľadávať údaje zodpovedajúce zložitým kritériám. Pozreli sme sa na zástupné znaky v predchádzajúcom návode. Ak ste predtým pracovali so zástupnými znakmi, možno sa pýtate, prečo sa učiť regulárne výrazy, keď pomocou zástupných znakov môžete získať podobné výsledky. Pretože v porovnaní so zástupnými znakmi nám regulárne výrazy umožňujú vyhľadávať údaje zodpovedajúce ešte zložitejšiemu kritériu.
Základná syntax
Základná syntax regulárneho výrazu je nasledovná
SELECT statements… WHERE fieldname REGEXP 'pattern';
TU -
- „Príkazy SELECT ...“ je štandardný príkaz SELECT
- „WHERE fieldname“ je názov stĺpca, v ktorom sa má vykonávať regulárny výraz.
- "REGEXP 'vzor'" REGEXP je operátor regulárneho výrazu a 'vzor' predstavuje vzor, ktorý má zodpovedať REGEXP. RLIKE je synonymum pre REGEXP a dosahuje rovnaké výsledky ako REGEXP. Aby nedošlo k zámene s operátorom LIKE, je lepšie použiť radšej REGEXP .
Pozrime sa teraz na praktický príklad -
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Vyššie uvedený dopyt vyhľadáva všetky filmové tituly, ktoré obsahujú slovný kód. Nezáleží na tom, či je „kód“ na začiatku, v strede alebo na konci názvu. Pokiaľ je obsiahnutý v názve, bude sa brať do úvahy.
Predpokladajme, že chceme hľadať filmy, ktoré začínajú písmenami a, b, c alebo d, po ktorých bude nasledovať ľubovoľný počet ďalších postáv. Ako by sme to dosiahli? Na dosiahnutie požadovaných výsledkov môžeme použiť regulárny výraz spolu s metaznakmi.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Vykonanie vyššie uvedeného skriptu v pracovnej ploche MySQL proti myflixdb nám dáva nasledujúce výsledky.
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 |
Poďme sa teraz bližšie pozrieť na náš regulárny výraz zodpovedný za vyššie uvedený výsledok.
„[abcd]“ vsuvka (^) znamená, že sa vzorová zhoda má použiť na začiatku a charlist [abcd] znamená, že sa v našej výsledkovej sade vrátia iba filmové tituly začínajúce na a, b, c alebo d.
Poďme upraviť náš vyššie uvedený skript a použiť NOT charlist a zistiť, aké výsledky dosiahneme po vykonaní nášho dotazu.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Vykonanie vyššie uvedeného skriptu v pracovnej ploche MySQL proti myflixdb nám dáva nasledujúce výsledky.
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 |
Poďme sa teraz bližšie pozrieť na náš regulárny výraz zodpovedný za vyššie uvedené výsledky.
'[abcd]' caret (^) znamená, že by sa mala použiť vzorová zhoda na začiatku a charlist [abcd] znamená, že filmové tituly začínajúce na ktorékoľvek z priložených znakov sú vylúčené z množiny výsledkov.
Metaznaky regulárneho výrazu
Na čo sme sa pozreli vo vyššie uvedenom príklade, je najjednoduchšia forma regulárneho výrazu. Pozrime sa teraz na pokročilejšie zhody vzorov regulárneho výrazu. Predpokladajme, že chceme vyhľadávať filmové tituly, ktoré začínajú vzorom „kód“, iba pomocou regulárneho výrazu, ako by sme to zvládli? Odpoveďou sú metaznaky. Umožňujú nám doladiť výsledky vyhľadávania vzorov pomocou regulárnych výrazov.
Char | Popis | Príklad | |
---|---|---|---|
* | Hviezdička (*) metaznaky sa používa tak, aby zodpovedala nula (0), alebo viac inštancií reťazcov predchádzajúcich ju | VYBERTE * Z FILMOV, KDE názov REGEXP 'da *'; poskytne všetkým filmom obsahujúcim znaky „da“. Napríklad Da Vinci Code, Daddy's Little Girls. | |
+ | Plus (+) metaznaky sa používa tak, aby zodpovedala jednej alebo viacerých inštancií reťazcov predchádzajúcich ju. | ZVOLIŤ * Z `filmov` KDE` title` REGEXP 'po +'; dá všetkým filmom obsahujúcim znaky „mon“. Napríklad Anjeli a démoni. | |
? | Otázka, (?) Metaznaky sa používa tak, aby zodpovedala nula (0), alebo jeden inštancia reťazcov predchádzajúcich ju. | VYBERTE * Z `kategórií` KDE` category_name` REGEXP 'com?'; dá všetky kategórie obsahujúce reťazec com. Napríklad komédia, romantická komédia. | |
. | Bodka (.) Metaznaky sa používa, aby zodpovedal jeden znak vo výnimkou nový riadok. | VYBERTE * Z filmov, KDE `year_released` REGEXP '200.'; uvedie všetky filmy vydané v rokoch počnúc znakmi „200“, za ktorými nasleduje ľubovoľný jeden znak. Napríklad 2005,2007,2008 atď. | |
[abc] | Charlist [abc] sa používa tak, aby zodpovedala niektorý z uvedených znakov. | VYBERTE * Z `filmov` KDE` title` REGEXP '[vwxyz]'; bude dávať všetky filmy obsahujúce akýkoľvek jeden znak v "vwxyz". Napríklad X-Men, Da Vinci Code atď. | |
[abc] | Charlist [abc] sa používa tak, aby zodpovedala ľubovoľné znaky s výnimkou tých, uzavreté. | VYBERTE * Z `filmov` KDE` title` REGEXP '[vwxyz]'; poskytne všetky filmy obsahujúce iné znaky ako tie, ktoré sú uvedené v „vwxyz“. | |
[AZ] | [AZ] sa používa na zodpovedať ľubovoľnej veľké písmeno. | SELECT * FROM `members` WHERE` postal_address` REGEXP '[AZ]'; dá všetkým členom, ktorí majú poštovú adresu, obsahujúci akýkoľvek znak od A do Z ... Napríklad Janet Jones s číslom členstva 1. | |
[az] | [Az] sa používa na zodpovedať ľubovoľnej malé písmeno | SELECT * FROM `members` WHERE` postal_address` REGEXP '[az]'; dá všetkým členom, ktorí majú poštové adresy obsahujúce akýkoľvek znak od a do z ... Napríklad Janet Jones s číslom členstva 1. | |
[0-9] | [0-9] sa používa, aby zodpovedali každému číslu od 0 až do 9. | SELECT * FROM `members` WHERE` contact_number` REGEXP '[0-9]' dá všetkým členom zadané kontaktné čísla obsahujúce znaky „[0-9]“. Napríklad Robert Phil. | |
^ | Strieška (^) sa používa pre spustenie zápas na začiatku. | VYBERTE * Z `filmov` KDE` title` REGEXP '[cd]'; poskytuje všetky filmy s názvom začínajúcim ľubovoľnou z postáv na disku „cd“. Napríklad Code Name Black, Daddy's Little Girls a Da Vinci Code. | |
| | Zvislá čiara (|) sa používa na izoláciu alternatív. | VYBERTE * Z `filmov` KDE` title` REGEXP '[cd] | [u]'; dáva všetkým filmom s názvom začínajúcim ktoroukoľvek z postáv na „cd“ alebo „u“. Napríklad Code Name Black, Daddy's Little Girl, Da Vinci Code a Underworld - Awakening. | |
[[: <:]] | Symbol [[: <:]] sa zhoduje so začiatkom slov. | VYBERTE * Z `filmov` KDE` title` REGEXP '[[: <:]] pre'; poskytuje všetky filmy s titulmi začínajúcimi postavami. Napríklad: Zabudnutie na Sarah Marshal. | |
[[:>:]] | Symbol [[:>:]] sa zhoduje s koncom slova. | VYBERTE * Z `filmov` KDE` titul` REGEXP 'potvrdí [[:>:]]'; poskytuje všetkým filmom s názvami končiacimi znakmi „ack“. Napríklad Code Name Black. | |
[:trieda:] | [: Trieda:] zodpovedá triedu znakov, teda [: alpha:], aby zodpovedali písmená, [: space:], aby zodpovedal biele miesto, [: punctata:] je stretnutie interpunkciu a [: horná:] u vyšších tried písmená. | VYBERTE * Z `filmov` KDE` title` REGEXP '[: alfa:]'; dáva všetkým filmom s názvami, ktoré obsahujú iba písmená. Napríklad Napríklad Forgetting Sarah Marshal, X-Men atď. Tento dopyt vynechá filmy ako Piráti z Karibiku 4. |
Spätná lomka (\) sa zvykne používať ako úniková postava. Ak ho chceme použiť ako súčasť vzoru v regulárnom výraze, mali by sme použiť dvojité spätné lomky (\\)
Zhrnutie
- Regulárne výrazy poskytujú silnú a flexibilnú zhodu vzorov, ktorá nám môže pomôcť implementovať nástroje na vyhľadávanie výkonu pre naše databázové systémy.
- REGEXP je operátor, ktorý sa používa pri vykonávaní zhôd so vzormi regulárneho výrazu. RLIKE je synonymum
- Regulárne výrazy podporujú množstvo metaznakov, ktoré umožňujú väčšiu flexibilitu a kontrolu pri vykonávaní zhôd vzorov.
- Spätná lomka sa používa ako úniková postava v regulárnych výrazoch. V zhode vzorov sa to zohľadňuje, iba ak boli použité dvojité spätné lomky.
- Regulárne výrazy nerozlišujú veľké a malé písmená.