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.

Klepněte pro větší obrázek
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#

Klepněte pro větší obrázekNestačí 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.

Témata článku: Programování, Tester, 1001

19 komentářů

Nejnovější komentáře

  • bob7 12. 2. 2010 11:17:03
    není náhodou v posledním výrazu...
  • Substance242 17. 9. 2009 23:51:54
    Aha. Jedine že by tak. :-)
  • Wikan 17. 9. 2009 22:43:30
    Slova regulární a regulérní mají odlišné významy.
Určitě si přečtěte

Špičkoví hackeři útočili na prohlížeče. Chrome odolal, ale Edge je tragédie

Špičkoví hackeři útočili na prohlížeče. Chrome odolal, ale Edge je tragédie

** Do Vancouveru se sjeli hackeři ** Soutěžili v útocích na prohlížeče ** Chrome odolal, ale Edge to projel na celé čáře

22.  3.  2017 | Jakub Čížek | 79

Pojďme programovat elektroniku: Meteostanice, která bude díky Sigfoxu posílat stav počasí třeba z vrcholu Sněžky

Pojďme programovat elektroniku: Meteostanice, která bude díky Sigfoxu posílat stav počasí třeba z vrcholu Sněžky

** Příští roky budou ve znamení internetu věcí ** Podívali jsme se podrobně na síť Sigfox ** Takhle s ní komunikují krabičky z celé Evropy

19.  3.  2017 | Jakub Čížek | 18

Kde nejlevněji uložit 1 TB dat: Srovnali jsme aktuální ceny cloudových úložišť

Kde nejlevněji uložit 1 TB dat: Srovnali jsme aktuální ceny cloudových úložišť

** Srovnali jsme známá cloudová úložiště podle toho, kolik měsíčně zaplatíte za 1TB ** Ceny se pohybují od dvou stovek až po tisíc korun ** Google umožní uložit až 30 TB dat

18.  3.  2017 | Stanislav Janů | 115

Obří Mechroboti jsou realitou, měří čtyři metry a mají hmotnost přes 1,5 tuny

Obří Mechroboti jsou realitou, měří čtyři metry a mají hmotnost přes 1,5 tuny

** Jihokorejská společnost Hankook Mirae Technology vyrábí obří Mechroboty ** Jsou určené pro ovládání člověkem uvnitř ** V prodeji se objeví koncem tohoto roku za 200 milionů korun

20.  3.  2017 | Karel Javůrek | 18

Google představil nový Android O. Na co se můžeme těšit?

Google představil nový Android O. Na co se můžeme těšit?

** Google vypustil vývojářskou verzi nového Androidu ** Přinese lepší notifikace nebo prodlouženou výdrž ** K uživatelům se dostane na podzim

22.  3.  2017 | Stanislav Janů | 60


Aktuální číslo časopisu Computer

Supertéma o počítačové bezpečnosti

AMD Ryzen přichází

Velké testy kinoprojektorů a levných sluchátek

Příslušenství do USB-C