(06.02.) 2. Klase imenskog prostora RegularExpressions
Da ponovimo:
Regularni izrazi su nizovi specijalnih znakova koji definišu obrazac za prepoznavanje teksta.
Nastavak...
U C# jeziku, za naprednu manipulaciju tekstom koriste se klase iz imenskog prostora System.Text.RegularExpressions.
Ovaj imenski prostor sadrži klase koje omogućavaju pretragu, zamenu i validaciju podataka pomoću obrazaca (patterna) definisanih regularnim izrazima.
Osnovne klase iz imenskog prostora System.Text.RegularExpressions
Rad sa regularnim izrazima omogućavaju sledeće ključne klase:
Regex: Glavna klasa za rad sa regularnim izrazima. Omogućava pretragu i manipulaciju stringovima pomoću regularnih izraza.Match: Predstavlja rezultat pojedinačne pretrage u stringu pomoću regexa.MatchCollection: Sadrži sve rezultate pretrage - kolekcija svih pronađenih podudaranja u datom stringu.Group: Predstavlja grupisane delove podudaranja. Koristi se za rad sa grupama unutar izraza.Capture: Predstavlja specifične segmente teksta uhvaćene u pretrazi. (Deo teksta koji je uhvaćen pomoću regularnog izraza.)RegexOptions: Enum koji definiše dodatne opcije za prilagođavanje rada sa regex-om.
Napomena:
using
System.Text.RegularExpressions" !!! Klasa Regex
Klasa Regex je centralna za rad sa regularnim izrazima. Omogućava pronalaženje podudaranja u tekstu, zamenu teksta i validaciju stringova pomoću regularnih izraza.
- Pre korišćenja klase Regex, na vrhu treba da se doda: "
using System.Text.RegularExpressions" - Zatim se kreira objekat klase Regex na osnovu zadatog obrasca:
Regex R = new Regex(pattern); - gde je:
- R - naziv instance klase Regex
- pattern - šablon koji se koristi za regularni izraz
Najčešće korišćene metode:
IsMatch(string input): Proverava da li dati string odgovara zadatom obrascu.Match(string input): Pronalazi prvo pronađeno poklapanje u stringu.Matches(string input): Pronalazi sva pronađena poklapanja u stringu.Replace(string input, string replacement): Zamenjuje poklapanja novim stringom.Split(string input): Deli tekst na osnovu obrasca (koristeći regularni izraz kao separator.).
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string tekst = "Dobrodošli u 2025. godinu!";
string obrazac = "\\d+"; // Traži brojeve u tekstu
if (Regex.IsMatch(tekst, obrazac))
{
Console.WriteLine("Tekst sadrži brojeve.");
}
Match prviBroj = Regex.Match(tekst, obrazac);
Console.WriteLine("Prvi pronađeni broj: " + prviBroj.Value);
}
}
Klasa Match
Kada koristimo Regex.Match(), dobijamo objekat klase Match koji sadrži informacije o pronađenom poklapanju, uključujući :
Success– vraćatrueako je pronađeno poklapanje.Value– vraća pronađeni podstring.Index– vraća poziciju pronađenog poklapanja u stringu.Length: Dužina podudaranja.Groups– vraća dodatne informacije ako su korišćene grupe u regularnim izrazima.
string tekst2 = "Telefon: 123-456-789";
string obrazac2 = "\\d{3}-\\d{3}-\\d{3}";
Match podudaranje = Regex.Match(tekst2, obrazac2);
if (podudaranje.Success)
{
Console.WriteLine("Pronađen broj telefona: " + podudaranje.Value);
Console.WriteLine("Pozicija: " + podudaranje.Index);
}
Klasa MatchCollection
Klasa MatchCollection sadrži skup svih pronađenih poklapanja u stringu. Dobija se metodom Regex.Matches().
string tekst3 = "Brojevi: 10, 20, 30.";
string obrazac3 = "\\d+";
MatchCollection podudaranja3 = Regex.Matches(tekst3, obrazac3);
foreach (Match m in podudaranja3)
{
Console.WriteLine("Pronađen broj: " + m.Value);
}
Klasa RegexOptions
RegexOptions pruža dodatne opcije za prilagođavanje pretrage.
Najčešće korišćene opcije:
IgnoreCase: Ignorisanje velikih i malih slova.Multiline: Obrada svake linije u tekstu odvojeno.Compiled: Poboljšanje performansi kompajliranjem regex-a.
string tekst4 = "Dobrodošli\ndobrodošli";
string obrazac4 = "dobrodošli";
MatchCollection podudaranja4 = Regex.Matches(tekst4, obrazac4, RegexOptions.IgnoreCase | RegexOptions.Multiline);
Console.WriteLine("Pronađeno podudaranja: " + podudaranja4.Count);
Klasa Group
Ako koristimo grupe unutar regularnog izraza, klasa Group omogućava pristup pojedinačnim grupama. - ovo zasad ne radimo
Klasa Capture
Klasa Capture omogućava detaljniji rad sa podacima koji su deo poklapanja. - ovo zasad ne radimo
Dodatni primer:
using System;
}
class Program
{
// regularni izraz za reč od 5 slova
// prvo slovo je "a" a poslednje slovo je "e"
static string pattern = "^a...e$";
static void Main()
{
// kreiranje instance klase Regex i
// postavljanje regularnog izraza u argument (pattern)
Regex rg = new Regex(pattern);
else
{
Console.WriteLine("String se ne poklapa sa zadatim šablonom");
}
}
U ovom primeru se proverava da li string "apple"odgovara definisanom šablonu regularnog izraza.
Šablon "^a...e$"označava bilo koji niz od pet slova koji počinje sa a i završava sa e. Metoda IsMatch() vraća true ako se string koji prosleđujemo poklapa sa šablonom regularnog izraza. Ako prosledimo drugi niz: "antilope", on se ne podudara sa šablonom, jer string "antilope" ima više od tri slova između a i e.
string pattern = "^a...e$";Dodatne vežbe za učenike
- proveravate da li u tekstu ima brojeva. Ako ima, treba ih ispisati
- ispisujete sve email aderse iz teksta
- ispisujete sve dvocifrene brojeve (ako ih ima)
- .......