Nástroje pro regulární výrazy – The Regulator
Použití regulárních výrazů se rozhodně neomezuje na jejich využití v různých programovacích jazycích. V systémech typu UNIX je použití regulárních výrazů na denním pořádku. I pro Windows však můžeme najít mnoho programů, které s regulárními výrazy určitým způsobem pracují.
Nedávno jste zde mohli zaregistrovat dvě série článků o regulárních výrazech (Perl-compatible regulární výrazy v PHP a Regulární výrazy a JavaScript). Použití regulárních výrazů se však rozhodně neomezuje na jejich využití v různých programovacích jazycích. V systémech typu UNIX je použití regulárních výrazů na denním pořádku (například v programu grep). I v prostředí Windows však můžeme najít mnoho programů, které s regulárními výrazy určitým způsobem pracují.
Regulární výrazy jsou například používány v pokročilejších textových a HTML editorech (například EditPad Pro či Homesite) při hledání a nahrazování řetězců, v některých souborových manažerech (například Total Commander) při hledání souborů nebo při nastavování filtrování došlých e-mailů ve webových rozhraních některých poštovních služeb. My si však na Intervalu postupně v několika článcích představíme programy, jejichž hlavním posláním je právě práce s regulárními výrazy. Jde v zásadě o dvě skupiny programů:
- Programy, které slouží k vytváření, ladění a testování regulárních výrazů.
- Programy, které slouží k porovnání shod (respektive vyhledávání odpovídajících řetězců) a hromadným záměnám řetězců.
Obě tyto skupiny se značně prolínají a tak většina programů částečně spadá svou funkčností do první i do druhé skupiny.
Ačkoli princip fungování regulárních výrazů, stejně jako nejběžnější možné operace s nimi (match = porovnání regulárního výrazu s řetězcem, replace = nahrazení části řetězce odpovídající regulárnímu výrazu jiným řetězcem, split = rozdělení řetězce na části, přičemž regulární výraz popisuje oddělovač) jsou v různých prostředích (například Perl, PHP, JavaScript, .NET) stejné, jisté nuance v pokročilejších možnostech práce s regulárními výrazy tu jsou.
Nejdříve si vezmeme na paškál několik programů, které pracují s .NET regulárními výrazy (samotné programy jsou .NETové aplikace a tak možnosti práce s regulárními výrazy v těchto aplikacích odpovídají možnostem .NET Framework regular expression enginu). Regulární výrazy v .NETu mají až na drobnosti (například trošku jiná syntaxe pojmenovaných subvýrazů) stejnou syntaxi a stejné chování jako Perl-compatible regulární výrazy v PHP.
The Regulator
Program The Regulator je jeden z nejznámějších programů pro tvorbu a testování regulárních výrazů (mimo jiné díky podpoře webu RegexLib.com). Zvládá všechny tři běžné operace (match, replace, split). Hlavní okno je rozděleno na tři části:
- horní část – regulární výraz
- levá dolní část – výsledek jednotlivých operací (záložky Matches, Replace output, Splits)
- pravá dolní část – záložky Input (zpracovávaný řetězec), Replace with (řetězec náhrady při operaci Replace)
The Regulator – hlavní okno
Protože tímto programem sérii našich recenzí začínáme, předvedeme si práci s programem tohoto typu na několika jednoduchých příkladech.
Příklad Match
Řekněme, že máme například mnohokrát přeposlaný e-mail a tělo e-mailu tak obsahuje mnoho e-mailových adres a my chceme všechny tyto adresy najít.
Pro popsání e-mailové adresy použijeme regulární výraz ([a-zA-Z0-9._-]+)@([a-zA-Z0-9._-]+)\.([a-zA-Z]{2,4})
. Protože předmětem tohoto článku není tvorba regulárního výrazu popisujícího e-mailovou adresu, spokojíme se s tímto jednoduchým výrazem, kterému budou odpovídat všechny e-mailové adresy, které mají před zavináčem (stejně jako za zavináčem před doménou prvního řádu) alespoň jeden alfanumerický znak nebo znak tečka, podtržítko nebo pomlčka a za poslední tečkou v e-mailové adrese je doména prvního řádu (tvořená dvěma až čtyřmi písmeny). Regulární výraz je přitom ještě rozdělen kulatými závorkami na tři subvýrazy a tak operace Match zobrazí shody zvlášť pro jednotlivé subvýrazy.
Vhodný text pro vložení do pole Input jistě ve své e-mailové schránce najdete. Po stisknutí tlačítka Match v horní liště se vám v záložce Matches zobrazí strom shod s regulárním výrazem a jeho jednotlivými subvýrazy. Možná si teď říkáte, že je pěkné, že vidíte z e-mailu „vyzobané“ e-mailové adresy ve stromě shod, ale že byste je měli raději třeba jako seznam e-mailů (třeba každý e-mail na samostatném řádku). Jak se dočtete v první větě nápovědy, The Regulator je nástrojem pro testování regulárních výrazů, není tedy parsovacím či grep-like programem, takže je takový požadavek poněkud nadstandardní. Přesto lze daný problém v našem konkrétním případě vyřešit oklikou. Onou oklikou je použití operace Replace a mírná úprava regulárního výrazu.
Příklad Replace
Pusťme se tedy do řešení nastíněného problému. V poli Input necháme stejný text (nějakou e-mailovou zprávu obsahující e-mailové adresy ve svém těle). Jako regulární výraz použijeme (.*?)([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z]{2,4})
. Když srovnáme tento výraz s výše uvedeným, zjistíme, že:
- je regulární výraz popisující e-mail uzavřen do závorek (a tvoří tak druhý subvýraz)
- z regulárního výrazu popisujícího e-mail byly odstraněny závorky tvořící subvýrazy
- regulárnímu výrazu popisujícímu e-mail předchází výraz
(.*?)
(a tvoří tak první subvýraz)
Do záložky Replace with pak vyplníme $2
(respektive napíšeme $2
a stiskneme Enter!). Zápis $2
znamená zpětnou referenci na druhý subvýraz. První subvýraz zachytí veškerý text předcházející e-mailové adrese. Druhý subvýraz zachytí e-mailovou adresu. Protože se provádí globální vyhledávání a nahrazování (tedy nahrazení všech řetězců odpovídajících regulárnímu výrazu) a protože text následující za e-mailovou adresou je zároveň textem předcházející další e-mailové adrese (s výjimkou poslední), zachytí celý náš regulární výraz text těla e-mailu od začátku až do posledního znaku poslední e-mailové adresy.
Vraťme se ještě k prvnímu subvýrazu ((.*?)
) – tečka zastupuje jakýkoli znak, líná hvězdička (tedy hvězdička následovaná otazníkem) znamená libovolný počet opakování (avšak preferován je nejmenší možný počet výskytů – to je ona „lenost“ kvantifikátoru). Tečka standardně zastupuje jakýkoli znak s výjimkou znaku konce řádku. Aby metaznak tečka pohltil i znak konce řádku, je třeba použít modifikátor (přepínač, příznak) Single line (zapíná se na hlavní liště – páté tlačítko zprava). Po stisknutí tlačítka Replace tak dostanete seznam e-mailových adres (každou na samostatném řádku), ovšem za poslední e-mailovou adresou bude bohužel následovat zbytek těla e-mailové zprávy.
The Regulator – Replace
Příklad Split
Třetí operací, kterou můžeme s programem The Regulator testovat, je Split, tedy rozdělení vstupního textu na části, přičemž řetězec, který se má použít jako oddělovač těchto částí, musí odpovídat zadanému regulárnímu výrazu.
V tomto případě si dovolím zcela primitivní modelový příklad. Řekněme, že máme seznam křestních jmen a ta jsou oddělena mezerou, čárkou, středníkem nebo nějakou kombinací těchto znaků. Do pole Input vyplníme třeba Karel Jarda, Pavel, Tomáš;Filip
. Jako regulární výraz použijeme [,; ]+
, tedy výraz, kterému odpovídá řetězec o minimální délce jeden znak složený výhradně ze zmíněných tří znaků (čárka, středník, mezera). Po stisknutí tlačítka Split se nám zobrazí v záložce Splits oněch nalezených pět jmen.
The Regulator – Split
Další funkce a vlastnosti
V hlavním okně můžete mít otevřeno několik regulárních výrazů, respektive projektů (kompletní sada nastavení = regulární výraz, vstupní text a text náhrady). Tyto projekty můžete ukládat do souborů s příponou .express (strukturou se jedná o XML soubory). Při tvorbě výrazů vám může pomáhat Intellisense, což je funkce známá hlavně z programátorských vývojových prostředí, která vám na základě napsané části regulárního výrazu nabídne možné konstrukce.
The Regulator – Intellisense
Pokud s regulárními výrazy načínáte a nejste si jisti, co který znak či konstrukce ve výrazu znamenají, může vám přijít vhod také Regex Analyzer (v menu | View | Regex Analyzer |).
The Regulator – Regex Analyzer
Často používané regulární výrazy či jejich části si také můžete uložit do Snippets (úryvky) – zvláštní paletky, kterou zobrazíte pomocí | View | Snippets |.
Pokud vytváříte aplikace ve VB.NET či C#, můžete si nechat na základě toho vygenerovat kód do vašeho programu (v menu | Tools | Generate code... |).
The Regulator – Generate Code
Díky spolupráci tvůrce programu s webem RegexLib.com můžete přímo z programu odeslat vámi vytvořený regulární výraz do databáze regulárních výrazů (v menu | Tools | Regexlib.com Submission Wizard... |) nebo vyhledávat regulární výrazy v této databázi (v menu | View | Web Search |). Součástí programu je nápověda popisující většinu funkcí. Program The Regulator 2.0.3 je freeware.
Poznámka: Záměrně jsem v tomto článku opomenul popis jednotlivých přepínačů (modifikátorů). Na přepínače se podíváme podrobněji příště, u programu, který obsahuje celou sadu přepínačů, kterou .NET prostředí nabízí. Popsány tak budou i všechny přepínače, které najdeme v programu The Regulator (a kde fungují zcela stejně).
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Landing page: Jak vytvořit landing page s vysokým CTR
7. května 2024 -
AI a internetové podvody
29. října 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024