Regulární výrazy MYSQL (REGEXP) se syntaxí & Příklady

Anonim

Co jsou regulární výrazy?

Regulární výrazy pomáhají vyhledávat data odpovídající složitým kritériím. Podívali jsme se na zástupné znaky v předchozím kurzu. Pokud jste již dříve používali zástupné znaky, můžete se ptát, proč se učit regulární výrazy, když pomocí zástupných znaků můžete získat podobné výsledky. Protože ve srovnání se zástupnými znaky nám regulární výrazy umožňují vyhledávat data odpovídající ještě složitějšímu kritériu.

Základní syntaxe

Základní syntaxe regulárního výrazu je následující

SELECT statements… WHERE fieldname REGEXP 'pattern';

TADY -

  • „Příkazy SELECT…“ je standardní příkaz SELECT
  • „WHERE fieldname“ je název sloupce, ve kterém má být regulární výraz proveden.
  • "REGEXP 'pattern'" REGEXP je operátor regulárního výrazu a 'pattern' představuje vzor, ​​který má být porovnán pomocí REGEXP. RLIKE je synonymem pro REGEXP a dosahuje stejných výsledků jako REGEXP. Aby nedošlo k záměně s operátorem LIKE, je lepší místo toho použít REGEXP .

Pojďme se nyní podívat na praktický příklad -

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

Výše uvedený dotaz vyhledává všechny filmové tituly, které obsahují kód slova. Nezáleží na tom, zda je „kód“ na začátku, uprostřed nebo na konci názvu. Dokud je obsažen v názvu, bude zvážen.

Předpokládejme, že chceme hledat filmy, které začínají písmeny a, b, c nebo d, následované libovolným počtem dalších postav, jak bychom toho dosáhli. K dosažení požadovaných výsledků můžeme použít regulární výraz společně s metaznaky.

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

Provedení výše uvedeného skriptu v pracovní ploše MySQL proti myflixdb nám dává následující 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

Pojďme se nyní podrobně podívat na náš regulární výraz odpovědný za výše uvedený výsledek.

'[abcd]' stříška (^) znamená, že shoda vzoru by měla být použita na začátku a charlist [abcd] znamená, že v naší sadě výsledků budou vráceny pouze názvy filmů, které začínají a, b, c nebo d.

Pojďme upravit náš výše uvedený skript a použít NOT charlist a uvidíme, jaké výsledky získáme po provedení našeho dotazu.

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

Provedení výše uvedeného skriptu v pracovní ploše MySQL proti myflixdb nám dává následující 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

Pojďme se nyní blíže podívat na náš regulární výraz odpovědný za výše uvedené výsledky.

'[abcd]' stříška (^) znamená, že by měla být použita shoda vzoru na začátku a charlist [abcd] znamená, že názvy filmů začínající na kterékoli z přiložených znaků jsou vyloučeny ze sady výsledků.

Metaznaky regulárního výrazu

Na co jsme se podívali ve výše uvedeném příkladu, je nejjednodušší forma regulárního výrazu. Podívejme se nyní na pokročilejší shody vzorů regulárních výrazů. Předpokládejme, že chceme hledat filmové tituly, které začínají vzorem „kód“ pouze pomocí regulárního výrazu, jak bychom to provedli? Odpověď jsou metaznaky. Umožňují nám doladit výsledky hledání vzorů pomocí regulárních výrazů.

Char Popis Příklad
* Hvězdička (*) Metaznak se používá tak, aby odpovídala nula (0), nebo více instancí řetězců předcházejících ji VYBERTE * Z FILMŮ KDE název REGEXP 'da *'; dá všem filmům obsahujícím znaky „da“. Například Da Vinci Code, Daddy's Little Girls.
+ Plus (+) Metaznak se používá tak, aby odpovídala jedné nebo více instancí řetězců předcházejících ji. VYBERTE * Z `filmů` KDE` název` REGEXP 'po +'; dá všem filmům obsahujícím znaky „mon“. Například Andělé a démoni.
? Otázka, (?) Metaznak se používá tak, aby odpovídala nula (0), nebo jeden instance řetězců předcházejících ji. SELECT * FROM `category` WHERE` category_name` REGEXP 'com?'; dá všechny kategorie obsahující řetězec com. Například komedie, romantická komedie.
. Tečka (.) Metaznak se používá, aby odpovídal jeden znak ve výjimkou nový řádek. VYBRAT * Z FILMŮ KDE `year_released` REGEXP '200.'; uvede všechny filmy vydané v letech počínaje znaky „200“, po nichž následuje libovolný znak. Například 2005,2007,2008 atd.
[abc] Seznam charlistů [abc] se používá ke shodě s libovolnými přiloženými znaky. VYBERTE * Z `filmů` KDE` název` REGEXP '[vwxyz]'; dá všechny filmy obsahující libovolnou jednu postavu v "vwxyz". Například X-Men, Da Vinci Code atd.
[abc] Seznam charlistů [abc] se používá ke shodě s libovolnými znaky kromě přiložených. VYBERTE * Z `filmů` KDE` název` REGEXP '[vwxyz]'; dá všechny filmy obsahující jiné znaky než ty, které jsou ve "vwxyz".
[AZ] [AZ] se používá k odpovídat libovolné velké písmeno. SELECT * FROM `members` WHERE` postal_address` REGEXP '[AZ]'; dá všem členům, kteří mají poštovní adresu obsahující libovolný znak od A do Z ... Například Janet Jones s členským číslem 1.
[az] [Az] se používá k odpovídat libovolné malé písmeno SELECT * FROM `members` WHERE` postal_address` REGEXP '[az]'; dá všem členům, kteří mají poštovní adresy obsahující libovolný znak od a do z ... Například Janet Jones s členským číslem 1.
[0-9] [0-9] se používá, aby odpovídaly každému číslu od 0 až do 9. SELECT * FROM `members` WHERE` contact_number` REGEXP '[0-9]' dá všem členům odeslaná kontaktní čísla obsahující znaky „[0-9]“. Například Robert Phil.
^ Stříška (^) se používá pro spuštění zápas na začátku. VYBERTE * Z `filmů` KDE` název` REGEXP '[cd]'; dává všem filmům s titulem začínající na kteroukoli z postav v „cd“. Například Code Name Black, Daddy's Little Girls a Da Vinci Code.
| Svislá čára (|) se používá k izolaci alternativ. VYBERTE * Z `filmů` KDE` název` REGEXP '[cd] | [u]'; dává všem filmům s titulem začínající na kteroukoli z postav v „cd“ nebo „u“. Například Code Name Black, Daddy's Little Girl, Da Vinci Code a Underworld - Awakening.
[[: <:]] [[: <:]] Se shoduje se začátkem slov. VYBERTE * Z `filmů` KDE` název` REGEXP '[[: <:]] pro'; dává všechny filmy s tituly počínaje postavami. Například: Zapomnění Sarah Marshal.
[[:>:]] Symbol [[:>:]] odpovídá konci slova. VYBRAT * Z `filmů` KDE` název` REGEXP 'potvrdit [[:>:]]'; dává všem filmům s názvy končícími znaky „ack“. Například Code Name Black.
[:třída:] [: Třída:] odpovídá třídu znaků, tedy [: alpha:], aby odpovídaly písmena, [: space:], aby odpovídal bílé místo, [: punct:] je utkání interpunkci a [: horní:] u vyšších tříd písmena. VYBERTE * Z `filmů` KDE` název` REGEXP '[: alfa:]'; dává všem filmům s názvy pouze písmena. Například Zapomenutí na Sarah Marshal, X-Men atd. Tento dotaz vynechá filmy jako Piráti z Karibiku 4.

Zpětné lomítko (\) je zvyklé na znak úniku. Pokud ho chceme použít jako součást vzoru v regulárním výrazu, měli bychom použít dvojitá zpětná lomítka (\\)

souhrn

  • Regulární výrazy poskytují výkonnou a flexibilní shodu vzorů, která nám může pomoci implementovat nástroje pro vyhledávání výkonu pro naše databázové systémy.
  • REGEXP je operátor používaný při provádění shod vzorů regulárních výrazů. RLIKE je synonymum
  • Regulární výrazy podporují řadu metaznaků, které umožňují větší flexibilitu a kontrolu při provádění shody vzorů.
  • Zpětné lomítko se používá jako řídicí znak v regulárních výrazech. V případě shody vzoru se uvažuje, pouze pokud byla použita dvojitá zpětná lomítka.
  • Regulární výrazy nerozlišují velká a malá písmena.