Regulárne výrazy MYSQL (REGEXP) so syntaxou & Príklady

Anonim

Č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á.