Класе именског простора RegularExpressions¶
Именски простор
RegularExpressions
обезбеђује класе за рад са регуларним изразима. Основна класа коју ћеш најчешће
користити је Regex,
али постоји и више других помоћних класа, енумерација и делегата који
омогућавају напредну обраду података. Неки од њих су:
Matchје класа која представља резултат једног поклапања регуларног израза са стрингом,MatchCollectionпредставља скуп свих поклапања у једном стрингу,Groupпредставља део поклапања дефинисан заградама у регуларном изразу,GroupCollectionпредставља скуп свих група у оквиру једног поклапања,Captureпредставља конкретан део текста који је поклопљен,CaptureCollectionпредставља све појаве поклапања за један елемент, иRegexOptionsје енумерација која одређује додатне опције за рад са регуларним изразима.
Провера поклапања¶
Метода IsMatch() враћа True уколико је наведени регуларни израз пронашао
поклапање у наведеном улазном стрингу, односно False уколико није. На пример:
string tekst = "Moj broj telefona je 063/123-4567";
string sablon = @"\d{3}/\d{3}-\d{4}";
bool sadrziBroj = Regex.IsMatch(tekst, sablon);
Console.WriteLine($"Pronadjeno: {sadrziBroj}"); // Pronadjeno: True
Проналажење првог поклапања¶
Метода Match() тражи прво појављивање регуларног израза у наведеном
улазном стрингу. На пример:
string tekst = "Danas je 28.05.2025. godine.";
string sablon = @"\d{2}\.\d{2}\.\d{4}";
Match m = Regex.Match(tekst, sablon);
if (m.Success)
{
Console.WriteLine($"Pronadjen datum: {m.Value}"); // Pronadjen datum: 28.05.2025.
Console.WriteLine($"Pozicija: {m.Index}"); // Pozicija: 9
}
Ако исти шаблон треба да користиш више пута, можеш инстанцирати Regex
објекат, на пример:
Regex reg = new Regex(@"\d{4}");
bool postoji = reg.IsMatch("Godina je 2025");
Match m = reg.Match("Godina: 2025");
Проналажење свих поклапања¶
Метода Matches() претражује наведени улазни стринг за сва појављивања
наведеног регуларног израза. На пример:
string tekst = "Kontakt telefoni: 062-123-456, 063-789-012, 064-555-666";
string sablon = @"\d{3}-\d{3}-\d{3}";
MatchCollection mc = Regex.Matches(tekst, sablon);
Console.WriteLine($"Ukupno pronadjeno {mc.Count} broja:"); // Ukupno pronadjeno 3 broja:
foreach (Match m in mc)
{ // * 062-123-456
Console.WriteLine($"* {m.Value}"); // * 063-789-012
} // * 064-555-666
Замена текста¶
Метода Replace(), у наведеном улазном низу, замењује све низове који се
подударају са наведеним регуларним изразом са наведеним низом за замену.
string tekst = "Moja e-mail adresa je petar@petrovic.com";
string sablon = @"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b";
string zamena = "[SAKRIVEN EMAIL]";
string rezultat = Regex.Replace(tekst, sablon, zamena);
Console.WriteLine(rezultat); // Moja e-mail adresa je [SAKRIVEN EMAIL]
Групе поклапања¶
У шаблону можеш користити заграде () за дефинисање група (подделова), чиме се
добија колекција Groups:
Groups[0]за цело поклапањеGroups[1],Groups[2]… за појединачне групе
string tekst = "Ime: Velimir, godina: 18";
Match m = Regex.Match(tekst, @"Ime: (\w+), godina: (\d+)");
string ime = m.Groups[1].Value; // Velimir
string godina = m.Groups[2].Value; // 18
Када је једна група дефинисана као понављајућа, могуће је добити више ухваћених
појава те групе преко својства Captures, на пример:
string tekst = "1,2,3";
Match m = Regex.Match(tekst, @"(\d,?)+");
foreach (Capture c in m.Groups[1].Captures)
{
Console.WriteLine(c.Value); // 1, 2, 3
}
Контрола понашања Regex објекта¶
За контролу понашања Regex објекта можеш да користиш енумерацију
RegexOptions:
IgnoreCaseигнорише разлику између великих и малих слова,Multilineомогућава да се^и$односе на почетак и крај сваког реда,Singlelineомогућава да.обухвати и знак новог реда,Compiledкомпајлира израз за брже извршавање, иIgnorePatternWhitespaceигнорише размаке у шаблону.
На пример:
Regex regex = new Regex(@"^ime:\s+\w+$", RegexOptions.IgnoreCase);
bool validno = regex.IsMatch("Ime: Jovan"); // true
Рад са регуларним изразима у .NET Framework-у се ослања на класе именског
простора RegularExpressions. Ове класе омогућавају једноставну примену
шаблона, као и напредно руковање групама и поклапањима. Разумевање класа као
што су Regex, Match, Group и Capture омогућава креирање робусних и
флексибилних решења за обраду текста.
У наредној лекцији биће обрађена контрола уноса текстуалних података, односно како у оквиру графичког корисничког интерфејса омогућити валидацију уноса у реалном времену.