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

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

** V Brně byl velký výpadek služeb UPC ** Důvodem je překopnutý páteřní kabel ** V některých lokalitách služby stále nefungují

5.  12.  2016 | Jakub Čížek | 100

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

** Zmizí klasické vyhledávače ** Budeme programovat buňky ** Kvantové počítače překonají šifry

6.  12.  2016 | Jakub Čížek | 34

ASUS ZenBook 3 se začal prodávat v Česku. Je ve všem lepší než MacBook, ale bude to stačit?

ASUS ZenBook 3 se začal prodávat v Česku. Je ve všem lepší než MacBook, ale bude to stačit?

** Novinka od Asusu míří přímo proti MacBooku od Applu ** Nabídne daleko více výkonu za stejné peníze

2.  12.  2016 | David Polesný | 144

11 tipů na dobrý stolní počítač: od základu po herní mašiny

11 tipů na dobrý stolní počítač: od základu po herní mašiny

** Postavte si stolní počítač! Máme pro vás 11 vzorových sestav s rozpisem komponent ** Většina tipů cílí na hráče, věnujeme se ale i základnímu PC a počítačům na střih videa ** Nadělte si nový počítač třeba pod stromeček

5.  12.  2016 | Adam Kahánek | 73


reklama