Jak jsem slíbil, podíváme se v tomto článku na program Expresso a zaměříme se tentokrát především na přepínače (modifikátory) ovlivňující zpracování regulárního výrazu.

Nejdříve si však představíme rozhraní programu Expresso. Hlavní okno programu je rozděleno na tři části:

  • horní část – se skládá ze šesti záložek Regular Expression (pouze regulární výraz), Replacement String (řetězec náhrady), Expression Library (knihovna uložených výrazů), Recent Expressions (naposledy použité výrazy), Analyzer (rozklad/vysvětlení výrazu), Options (přepínače, chcete-li modifikáory či „flagy“ – podrobněji viz níže)
  • levá dolní část – vstupní text (řetězec)
  • pravá dolní část – výsledek operací Match (respektive Search) a Replace

Operace Match, Partial Match, Exclude Match

Jako příklad pro operaci Match použiji stejný výraz jako v článku o programu The Regulator, tedy nalezení e-mailových adres v textu (proto budu na tomto místě již stručnější). Použit byl regulární výraz ([a-zA-Z0-9._-]+)@([a-zA-Z0-9._-]+)\.([a-zA-Z]{2,4}), který obsahuje tři subvýrazy. Na obrázku tak můžeme vidět strom zobrazující nalezené e-mailové adresy a jejich části. Vyberete-li libovolnou e-mailovou adresu ve stromě, vysvítí se i ve vstupním textu. Operací Match spustíte tlačítkem Run Match.

Expresso - hlavní okno
Expresso – hlavní okno

Za zmínku rozhodně stojí také tlačítka Partial Match a Exclude Match. Pokud označíte část regulárního výrazu (tak aby označená část byla platným regulárním výrazem) a stisknete Partial Match, provede se operace Match (tedy porovnání) jen s označenou částí regulárního výrazu. Tlačítko Exclude Match funguje opačně, provede se operace Match jen s neoznačenou částí regulárního výrazu.

Expresso - Partial Match
Expresso – Partial Match

Operace Replace

V programu Expresso můžete také provádět záměnu řetězců odpovídajících regulárnímu výrazu. Funkci programu si ukážeme na triviálním, regulární výraz skoro nevyžadujícím, ale užitečném příkladu. Určitě čas od času dostanete nějaký ten tisíckrát přeposlaný e-mail (například nějaký dobrý vtip), jehož každý řádek začíná několikanásobným odsazením pomocí znaku „>“. Pokud chcete takový e-mail očistit od těchto odsazení, můžete jako regulární výraz vyplnit > ? a pole Replacement String nechat prázdné. Všechny znaky > (včetně nepovinně následujícího znaku mezery) budou odstraněny. (Tento regulární výraz je velmi primitivní a tak nahradí v textu všechna většítka – ve většině vtipů se však mnoho většítek nevyskytuje.)

Expresso - Replace
Expresso – Replace

Options (Přepínače)

Jak jsem již zmínil v předchozím článku, Expresso podporuje všechny přepínače, které .NET při práci s regulárními výrazy nabízí. Některé přepínače odpovídají modifikátorům, které nabízí PHP (psal jsme o nich v sérii článků Perl-compatible regulární výrazy v PHP). Pokud znáte modifikátory v PHP, podívejte se na malou srovnávací tabulku:

Modifikátor v PHP Přepínač v .NET
i IgnoreCase
m Multiline
s Singleline
x IgnorePatternWhitespace

Ačkoli se na popis jednotlivých přepínačů můžete podívat přímo do MSDN (v manuálu popis těchto přepínačů bohužel nenajdete), každý uživatel programu Expresso nemusí být .NET programátor a tak stručně jednotlivé přepínače popíšu:

  • Compiled – regulární výraz bude zkompilován
  • CultureInvariant – ignorování jazykových rozdílností
  • ECMAScript – zapne ECMAScript vyhodnocování regulárního výrazu
  • ExplicitCapture – způsobí, že běžné závorky v regulárním výrazu (vytvářející subvýraz) nebudou zachytávat řetězce (nebude se možno na ně odkazovat pomocí zpětných referencí); zachytávání zajistí pouze pojmenované subvýrazy
  • IgnoreCase – ignorování rozdílu mezi malými a velkými písmeny
  • IgnorePatternWhitespace – v regulárním výrazu ignoruje mezery část vpravo od znaku # (komentář)
  • Multiline – mění význam ^ a $ v regulárním výrazu; ^ vytváří shodu na i na začátku každého řádku, $ vytváří shodu i na konci každého řádku
  • RightToLeft – vyhledávání zprava doleva
  • Singleline – mění význam metaznaku tečka (.); tečka vytváří shodu i se znakem konce řádku (\n)

Další funkce a vlastnosti

Projekty (nastavení regulárního výrazu, řetězce pro záměnu a vstupního textu) můžete ukládat do souborů s příponou .xso. Pokud s regulárními výrazy začínáte a nejste si jisti, co který znak či konstrukce ve výrazu znamenají, může vám přijít vhod také Analyzer (záložka Analyzer – viz druhý obrázek výše), který rozebere regulární výraz na části a tyto části slovně interpretuje. Pří tvorbě regulárního výrazu vám také může pomoci Builder (v menu | Tools | Show Builder |), kde v šesti záložkách najdete různé konstrukce a speciální znaky, které můžete vložit přímo do vytvářeného výrazu.

Expresso - Builder
Expresso – Builder

Naposledy použité regulární výrazy vám jsou k dispozici pod záložkou Recent Expressions. Užitečné regulární výrazy si můžete ukládat do knihoven regulárních výrazů – tyto knihovny je také možno uložit jako .xso soubory (menu Library).

Expresso - Regular Expressions Library
Expresso – Regular Expressions Library

Časovou náročnost daného regulárního výrazu na předloženém textu si můžete docela dobře vyzkoušet pomocí funkce Timing (v menu | Tools | Timing Tests... |). Tato funkce provede operaci Match ve stanoveném počtu opakování. Vyzkoušet si tak můžete třeba rozdíl mezi regulárními výrazy <.+?> a <[^>]+>. Oba (zjednodušeně) popisují HTML tag, každý to však dělá jinak. (Bylo by možno ukázat i přiklad, kde bude rozdíl v náročnosti ještě markantnější – takový příklad by však vyžadoval podrobnější popis.)

Expresso - Timing
Expresso – Timing

Programu Expresso umí také přímo generovat kód pro C#, Visual Basic a Managed C++. Program obsahuje nápovědu popisující většinu funkcí a také „The 30 Minute Regex Tutorial“, vysvětlující tvorbu regulárních výrazů. Expresso 2.1 je freeware. Časově omezenou verzi programu si můžete stáhnout a po bezplatné registraci vám bude e-mailem zaslán registrační kód, který odstraní časové omezení.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět