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.