reklama

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í, 1001, Tester

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.
reklama
Určitě si přečtěte

Microsoft: Zbavte se už konečně zastaralých a děravých Windows 7

Microsoft: Zbavte se už konečně zastaralých a děravých Windows 7

** Microsoft pomalu začíná kritizovat svůj nejpopulárnější OS ** Chce konečně dostat podniky na Desítky ** Bezpečnostní podpora Sedmiček vydrží ještě necelé tři roky

17.  1.  2017 | Jakub Čížek | 406

Vyzkoušeli jsme FM štěnici: Když si vtipálci hrají na pirátské rozhlasové vysílání

Vyzkoušeli jsme FM štěnici: Když si vtipálci hrají na pirátské rozhlasové vysílání

** Dnes žádnou elektroniku programovat nebudeme ** Štěnice totiž funguje sama o sobě ** Stačí připojit baterii a naladit frekvenci

Včera | Jakub Čížek | 14

8 produktů, o kterých byste neřekli, že nesou značku Apple

8 produktů, o kterých byste neřekli, že nesou značku Apple

** Věděli jste, že Apple vyvinul celkem 45 modelů tiskáren? ** ** Monitor na výšku, plotter nebo herní konzole - to vše měl Apple ve své nabídce ** Většinu z těchto produktů pohřbil Steve Jobs

19.  1.  2017 | Stanislav Janů | 42

Umělá inteligence dokáže ze snímků srdce předpovědět, kdy zemřete

Umělá inteligence dokáže ze snímků srdce předpovědět, kdy zemřete

** Strojové učení lze skvěle použít pro vylepšení modelů pro předpověď srdečních komplikací ** Nová technologie umožňuje přesněji určit rizikové pacienty ** Dřívější diagnostika může díky včasně léčbě do budoucna zachránit životy

21.  1.  2017 | Karel Javůrek | 7


Aktuální číslo časopisu Computer

99 nejlepších programů pro váš počítač

Zvykejte si na umělou inteligenci

Velké testy PC zdrojů a gamepadů

Alternativní zdroje energie

reklama
reklama