reklama

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

V první části jsme se seznámili s regulárními výrazy, nyní se podíváme, jak s nimi lze pracovat v jazyku C#. Jak tedy vlastně funguje náš program na kontrolu regulárních výrazů?

V minulém díle jsme si ve stručnosti vysvětlili, co to jsou regulární výrazy, jaké skýtají možnosti a jakým způsobem je můžete efektivně využívat. V dnešním pokračování se podíváme na programovou implementaci v jazyce C#.


Jak na regex v C#

Pro práci s regulárními výrazy je v prostředí .NET vyhrazen speciální jmenný prostor System.Text.RegularExpressions. Samotný regulární výraz je realizovaný třídou Regex, která leží v tomto jmenném prostoru. Pro přiřazení regulárního výrazu třídě Regex musíme použít konstruktor. Pro vyhledání prvního shodujícího řetězce slouží metoda Match, která jako argument očekává text, ve kterém budete vyhledávat. Tato metoda vrací instanci třídy Match, která představuje nalezený podřetězec a některé další doplňující informace. Pro získání hodnoty slouží vlastnost Value. Může se stát, že metoda Regex.Match nic nevyhledá. V tomto případě bude instance třídy Match mít nastavenou vlastnost Success na hodnotu False.

Připadá vám to složité? Podívejte se na následující praktickou ukázku. Metoda níže vyhledá v textu sekvenci po sobě jdoucích čísel:

public void GetNumber(string text)
{
  Regex reg = new Regex(@"\d{1,}");
  Match shoda = reg.Match(text);
  if (shoda.Success)
  {
    Console.WriteLine("Nalezené číslo je: " + shoda.Value + “ na pozici “ + shoda.Index
                       +” o délce “ +shoda.Length);
  }
  else
    Console.WriteLine("V textu se nevyskutuje žádné číslo");
}

Všimněte si použitých vlastností Length a Index třídy Match. První z nich vrací délku nalezeného podřetězce a druhá pak pozici jeho prvního znaku.

Rozšířené volby vyhledávání

Pokud budete chtít nastavit přesnější způsob vyhledávání, je nutné použít vlastnosti RegexOptions třídy Regex a k ní přiřadit položku výčtového typu RegexOptions. Popis nejpoužívanějších položek uvádím v násldující tabulce:

Compiled Regulární výraz je přeložen „na tvrdo“ do aplikace, takže vyhledávání běží rychleji.
IgnoreCase Ignoruje velikost písmen.
MultiLine Poupraví výrazy ^ a $ tak, že vyhledávají na začátcích a koncích jednotlivých řádků textu.
RightToLeft Vyhledávání probíhá v textu zprava doleva.
SingleLine Poupraví význam znaku „.“ tak, že ignoruje nové řádky.

Vyhledávání více podřetězců

Pro vyhledání více podřetěců použijeme metodu Matches, která vrací kolekci typu MatchCollection. Ke zjištění počtu prvků této kolekce použijeme, stejně tak jako u jakékoli jiné kolekce, vlastnost Length. V našem programu tedy tuto metodu použijeme v případě, že zaškrtnete políčko „Vyhledat všechny vzory“. V opačném případě se použije první jednoduchá metoda, která naleze pouze první výskyt řetězce.

Klepněte pro větší obrázek
Hotový program spuštěný ve Windows

Regex reg = new Regex(@"\d{1,}");
MatchCollection shody = reg.Matches(text);
foreach (Match shoda in shody)
{
  if (shoda.Success)
  {
    Console.WriteLine("Nalezené číslo je: " + shoda.Value);
  }
  else
    Console.WriteLine("V textu se nevyskutuje žádné číslo");
}

Grafické zvýraznění textuv komponentě RichTextBox

K barevnému zvýraznění určitého textu v komponentě RichTextBox musíme řetězec vybrat pomocí metody Select a následně nastavit barvu vybraného záznamu pomocí vlastnosti SelectionColor. Poté je nutné výběr zrušit metodou DeselectAll a posunout kurzor. na konec.

Klepněte pro větší obrázek  Klepněte pro větší obrázek
Pokud si nainstalujete Mono, můžete EXE program spustit i na Mac OS X nebo na LInuxu

Regex reg = new Regex(textBox1.Text);
i Match match = reg.Match(this.richTextBox1.Text);
if (match.Success)
{
  // Vybere podřetězec vyhovující regulárnímu výrazu
  this.richTextBox1.Select(match.Index, match.Length);
  this.richTextBox1.SelectionColor = Color.Green;
}
richTextBox1.DeselectAll();
// Posune kurzor na konec
richTextBox1.SelectionStart = richTextBox1.Text.Length;

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í, Match, Origin, Clip, 1001, Success

5 komentářů

Nejnovější komentáře

  • Tomáš Mareda 5. 10. 2009 22:56:49
    Trochu mne zarazila věta "Ke zjištění počtu prvků této kolekce použijeme,...
  • ricmat 2. 10. 2009 10:46:08
    Presne tak. Regexy jsou zde proto, ze poskytuji potrebny interface pro...
  • petrf 1. 10. 2009 16:49:54
    Primárně bych se držel čitelnosti RV. Rychlost zpracování je dána...
reklama
Určitě si přečtěte

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

22.  1.  2017 | Jakub Čížek | 31

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 | 409

Takto si špičkoví grafici představují nový Facebook. S čistým vzhledem a bez reklam

Takto si špičkoví grafici představují nový Facebook. S čistým vzhledem a bez reklam

** Design Facebooku se delší dobu nemění a pro mnohé je nudným ** Grafici zkouší navrhovat nové koncepty toho, jak by mohla síť vypadat ** Hlasujte pro nejzdařilejší návrh

22.  1.  2017 | Stanislav Janů | 65

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

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ů | 43


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