Záhadný zavináč a řetězce v C#

Objevil jsem Ameriku, tak si to musím zapsat. Krátká poznámka k tomu, co vlastně v C# dělá znak @ umístěný v kódu přímo před řetězec typu string.

V regulárních výrazech se bílé znaky v pattern značí sekvencí \s. Problém je, že se nejedná o standardní escape sekvenci, takže pokud ji použijete v rámci výrazu (a tedy uvnitř řetězce), kompilátor zařve, že sekvenci nezná (analogicky to samozřejmě platí i pro další nestandardní sekvence používané v regulárních výrazech, já potřeboval hledat bílé znaky, proto jsem použil \s).

A odtud je jen krůček k zavináči z nadpisu. Pokud jej totiž umístíte před řetězec, kompilátor ho zpracuje tak, jak je – tedy bez ohledu na escape sekvence. Pokud bychom například chtěli zapsat cestu souborového systému, můžeme to udělat třeba takto klasicky:

string cesta = "C:\\Adresar\\Soubor.txt";

Nebo s použitím @ takto:

string cesta = @"C:\Adresar\Soubor.txt";

A protože není problém kombinovat „doslovné“ řetězce s těmi escapovanými, vyřešil jsem svůj problém v regulárním výrazu následovně:

string pattern = "<td class=\"center\">" + @"[\s]+" + "([0-9]+)</td>";

Poznámka na závěr: Chceme-li napsat v doslovném režimu uvozovky („), je třeba je zdvojit: @"Ahoj, ""světe""!„.

One thought on “Záhadný zavináč a řetězce v C#

  1. Snake.Bite

    Áá, já věděl, že to bude nějaká prkotina :D… Ale všiml jsem si, že @ je velmi moderní psát všude poslední dobou. Děkuji za osvětlení ;)

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *