Staňte se programátorem: Tajemné regulární výrazy

Před regulárními výrazy má začínající programátor zpravidla obrovský respekt a občas i strach. Nebojte se jich, jsou jednoduché a často nahradí desítky řádků zdrojového kódu.

Dnešní projekt bude vlastně velmi jednoduchý, programovat totiž nebudeme C# kód, ale regulární výrazy, které nachází bohaté uplatnění napříč jazyky počínaje webovým Javascriptem a konče třeba jazyky z rodiny Microsoft .NET Framework. Součástí dnešního dílu tedy bude jednoduchá aplikace – tester, ve kterém budete moci trénovat regulární výrazy nejen z tohoto článku.

Regulární výraz je řetězec představující určitý vzor či formát podřetězce, jež má být v cílovém textu vyhledán ve všech možných variantách a který tomuto výrazu odpovídá.. Pomocí tříd .NET Frameworku určených pro manipulaci s regulárními výrazy můžete:

  • velmi rychlým způsobem vyhledávat podřetězce dle určitých kritérií
  • zjišťovat zda je určitý podřetězec vůbec v textu obsažen a pokud ano, zjistit jeho pozici a počet výskytů
  • najít a nahradit vyhledávaný podřetězec

Pomocí regulárního výrazu, který se vleze na jeden řádek stránky, tedy můžete sestrojit celkem složitý filtr, čehož využívají nejrůznější webové vyhledávače, programy pro hromadné přejmenovávání souborů nebo třeba vyhledávání textu v rozsáhlém dokumentu. V podmínce lze regulární výraz použít jako kontrolu na správně vyplněnou elektronickou adresu (e-mail má formát text@text.text), datum, IP adresu aj.

programek.png
Pomocí regulárního výrazu (vzoru) jsme v textu našli slova jablko a jablka

Nejjednodušší regulární výrazy

Jako nejjednodušší regulární výraz lze považovat čistý text. Ten bude vyhledán, ať je samotným slovem či součástí jiného slova. Pokud chceme definovat určitou množinu znaků, která může být v hledaném podřetězci, uzavřeme tyto znaky mezi hranaté závorky. Například výraz „Honz[aou]“ vyhledá výrazy Honza, Honzo nebo Honzu. Pro definování rozsahu znaků použijeme znak „-“, takže například „[a-k]“ vyhledá veškeré malé znaky, které jsou v abecedě od písmene „a“ po písmeno „k“. To samé platí i pro číslice, takže výraz „[1-4]“ bude odpovídat všem číslům od jedné do čtyř. Pokud nechceme, aby určitý znak nebyl obsažen ve vyhledávaném podřetězci, použijeme znak negace „^“.

Předdefinované typy znaků

Speciální znaky slouží ke konkrétnímu definování typu množiny znaků. Výčet těch nejpoužívanějších uvádím v následující tabulce:

Předdefinované typy znaků
.Představuje libovolný znak
\dPředstavuje číslici
\wPředstavuje písmeno abecedy nebo číslici
\bPředstavuje mezeru.
^Slouží k definování začátku řetězce
$Definuje konec řetězce
\nPředstavuje nový řádek

Příklady

.+\.

Vyhledá větu ukončenou tečkou. Znak „+“ říká, že se předchozí znak může opakovat minimálně jednou.

\w+

Vyhledá libovolnou posloupnost alfanumerických znaků

\bjablk[oa]\b

Vyhledá slovo jablko nebo jablka jako samostatné slovo oddělené mezerami.

^\w\d+$

Vyhledá řetězec začínající písmenem a končící alespoň jednou číslicí.

Nezapomeňte, že všechny tyto speciální znaky musí obsahovat znak „\“, jinak by byly brány jako obyčejné písmeno. Výjimku tvoří tečka představující libovolný znak. Pokud bychom chtěli vyhledat tečku nebo samostatné lomítko, musíme před ně dosadit znak „\“.

Opakování znaků

Pro určení způsobu opakování znaků slouží následující direktivy:

Direktivy pro opakování znaků
+Znak se musí opakovat alespoň jednou.
{x,y}Znak se musí opakovat nejméně xkrát ale maximálně y-krát.
{x,}Znak se musí opakovat nejméně xkrát.
*Znak se může opakovat v libovolném počtu nebo nemusí být vůbec obsažen.
{x}Znak se musí opakovat právě xkrát.

Příklady:

hé+j

Vyhledá héj, hééj, héééj atd....

\d{3}\s\d{2}

Vyhledá poštovní směrovací číslo ve tvaru xxx yy

(-|)\d{1,}(\.|)\d*

Vyhledá libovolné desetinné i celé číslo, které může být i záporné. Závorky zde slouží k definici výběru mezi několika hodnotami. Jednotlivé hodnoty se mezi závorkami oddělují znakem |.

(\w{1,}\.\w{1,}|\w*)@\w{1,}\.\w{2,3}

Vyhledá e-mailovou adresu

A to je vše. Nakonec si regulární výrazy můžete sami vyzkoušet, ke stažení totiž opět nabízíme zdrojové kódy včetně projektu pro Visual Studio 2008 (Express Edition) a spustitelný program jednoduchého testeru.


Mareš, Amadeo: 1001 tipů a triků pro C#

c_kniha_mares.pngNestačí vám náš seriál? Pořiďte si knihu jeho autora, ve které vás seznámí s tisícovkou programovacích tipů a technik.Díky velkému počtu tipů, návodů, triků a rad kniha poslouží při každé příležitosti. Kdykoli si nevíte rady, stačí nalistovat příslušnou stranu a problém okamžitě vyřešit. Tipy a triky míří především na začínající programátory; užitečné rady tu ovšem najdou i pokročilejší vývojáři a ostřílení znalci. SOučástí publikace je i přiložené DVD, na kterém najdete bezplatné vývojové prostředí Visual C#, databázový server a především všechny zdrojové kódy z knihy, takže je budete moci okamžitě použít.Webové stránky knihy.

Diskuze (20) Další článek: VIA uvádí miniaturní Pico-ITX desku s podporou HD akcelerace

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,