Vodič za C# Regex: Šta je C# regularni izraz

Ovaj vodič za C# Regex objašnjava šta je regularni izraz u C#, njegovu sintaksu, metode klase Regex i kako koristiti ove metode uz pomoć primjera:

Regularni izraz u C# se koristi za podudaranje određenog uzorka karaktera. Regularni izrazi se koriste kad god korisnik treba da pronađe neki obrazac koji se ponavlja ili izvrši provjeru valjanosti podataka ili čak za provjeru formatiranja podataka.

RegEx se koristi za pronalaženje da li niz sadrži ili se podudara sa datim uzorkom znakova. Redovni izraz je prvenstveno niz znakova koji označava obrazac.

Obrazac može biti bilo šta u rasponu od brojeva, znakova ili kombinacije svega. Regex se široko koristi za validaciju. Parsiranje ili uparivanje nizova, na primjer, pronalaženje da li niz odgovara formatu valute, broja telefona ili formata datuma.

Klasa regularnog izraza u C#

Regex klasa se koristi u C# za izvođenje operacija regularnog izraza. Sadrži nekoliko različitih metoda koje se mogu koristiti za izvođenje različitih operacija povezanih s regexom.

Može se koristiti za raščlanjivanje velikog teksta kako bi se pronašao određeni niz znakova korištenjem metoda koje se mogu koristiti za izvođenje podudaranja, za zamijeniti ili se može koristiti za podjelu niza znakova.

Regex klasa je prisutna unutar imenskog prostora; System.Text.RegularExpression. Klasa prihvata string u obliku niza znakova kao parametar.

C# Regex metode

koji smo kreirali “^Super” može se podudarati sa svim vrijednostima super, čak i superman ili natprirodno, ali ne želimo samo riječ “Super”.

Ovo znači da bi trebao biti razmak iza riječi za označite kraj riječi i početak druge riječi. Da bismo to uradili, dodaćemo simbol “\s” u obrazac i tako naš konačni obrazac napraviti kao

^Super\s

Scenario 3: Koristite regularni izraz da pronađete važeći fajl imena sa ekstenzijom tipa datoteke slike.

Još jedan važan scenario u realnom vremenu sa kojim se programeri često suočavaju je provjera valjanosti tipova datoteka. Recimo da imamo dugme za otpremanje u korisničkom sučelju, koje može prihvatiti samo ekstenzije tipa datoteke slike.

Moramo provjeriti valjanost datoteke za otpremanje korisnika i obavijestiti ga u slučaju da je otpremio pogrešan format datoteke. Ovo se lako može postići korištenjem Regularnog izraza.

U nastavku je jednostavan program za provjeru.

public static void Main(string[] args) gif)$"; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch("abc.jpg")); Console.WriteLine(reg.IsMatch("ab_c.gif")); Console.WriteLine(reg.IsMatch("abc123.png")); //When pattern doesnt match Console.WriteLine(reg.IsMatch(".jpg")); Console.WriteLine(reg.IsMatch("ask.jpegj")); 

Izlaz

Tačno

Tačno

Tačno

Netačno

Netačno

Objašnjenje

Ovdje moramo uskladiti ime dokumenta. Važeće ime datoteke sastoji se od tri dijela ( ime datoteke + . + ekstenzija datoteke ). Moramo kreirati regularni izraz koji će odgovarati sva tri dijela. Počnimo s podudaranjem prvog dijela, tj. naziva datoteke. Ime datoteke može sadržavati alfanumeričke i specijalne znakove.

Kao što je ranije rečeno, simbol koji to označava je “\w”. Također, ime datoteke može biti jedno ili višeslijedi tačka (.), zatim naziv web stranice nakon toga tačka (.) i na kraju ekstenzija domene.

Dakle, slično kao u prethodnom scenariju pokušat ćemo ga uskladiti dio po dio . Počnimo s podudaranjem "www." dio. Dakle, počinjemo sa početnim simbolom, a zatim kao "www." To je nešto što je fiksno, tako da koristimo početni simbol praćen tačnim riječima da se podudaraju.

“^www.”

Onda ćemo početi raditi na drugom dijelu. Drugi dio web adrese može biti bilo koje alfanumeričko ime. Dakle, ovdje ćemo koristiti uglaste zagrade prisutne u klasi znakova da definiramo raspon koji treba uskladiti. Nakon što dodate drugi dio sa drugim dijelom, dobićemo.

“^www.[a-zA-Z0-9]{3,20}”

Ovdje smo također dodali vitičaste zagrade da definiramo minimalnu i maksimalnu dužinu karaktera za naziv web stranice. Dali smo minimalno 3 i maksimalno 20. Možete dati bilo koju minimalnu ili maksimalnu dužinu koju želite.

Sada, nakon što smo pokrili prvi i drugi dio web adrese, ostaje nam samo posljednji dio, tj. ekstenzija domene. Prilično je slično onome što smo uradili u prethodnom scenariju, direktno ćemo se upariti s ekstenzijama domene korištenjem OR i zatvaranjem svake važeće ekstenzije domene unutar kružne zagrade.

Dakle, ako sve ovo zbrojimo, imat ćemo kompletan regularni izraz koji odgovara bilo kojoj važećoj web adresi.

www.[a-zA-Z0-9]{3,20}.(com|in|org|co\.in|net|dev)$

Scenario 5: Koristite regularni izraz da potvrditeemail id format

Pretpostavimo da na našoj web stranici imamo obrazac za prijavu koji traži od korisnika da unesu svoju adresu e-pošte. Iz očiglednih razloga, ne želimo da naš obrazac nastavi dalje s nevažećim adresama e-pošte. Da bismo potvrdili da li je adresa e-pošte koju je unio korisnik ispravna ili ne, možemo koristiti regularni izraz.

Dolje je dat jednostavan program za provjeru valjanosti adrese e-pošte.

public static void Main(string[] args) { string patternText = @"^[a-zA-Z0-9\._-]{5,25}.@.[a-z]{2,12}.(com|org|co\.in|net)"; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch("[email protected]")); Console.WriteLine(reg.IsMatch("[email protected]")); //When pattern doesnt match Console.WriteLine(reg.IsMatch("[email protected]")); }

Izlaz

Tačno

Tačno

Netačno

Objašnjenje

A važeća adresa e-pošte sadrži alfabete, brojeve i neke specijalne znakove kao što su tačka (.), crtica (-) i donje crte (_) nakon čega slijedi simbol “@” nakon kojeg slijedi naziv domene i ekstenzija domene.

Dakle, možemo podijeliti adresu e-pošte na četiri dijela, tj. identifikator e-pošte, simbol “@”, ime domene, a posljednji je ekstenzija domene.

Počnimo pisanjem regularnog izraza za prvi dio. Može biti alfanumerički sa nekim posebnim znakovima. Pretpostavimo da imamo veličinu izraza u rasponu od 5 do 25 znakova. Slično kao što smo ranije napisali (u scenariju e-pošte), možemo doći do sljedećeg izraza.

^[a-zA-Z0-9\._-]{5,25}

Sada prelazimo na drugi dio. To je relativno lako jer moramo uskladiti samo jedan simbol, tj. "@". Dodavanje u gornji izraz daje nam.

^[a-zA-Z0-9\._-]{5,25}.@

Prelazak na treći dio tj. ime domene uvijek će biti niz nižihpodudaranje riječi, abecede, adresa web stranica, ID-ova e-pošte, pa čak i tipova datoteka i ekstenzija.

Ovi scenariji su prilično korisni za provjeru valjanosti korisničkih unosa u stvarnom vremenu bez pisanja brojnih linija koda i na taj način pomažu u uštedi vremena i smanjiti složenost. Ovi primjeri su korišteni za usmjeravanje korisnika da kreiraju vlastiti skup regularnih izraza i na taj način im pomažu u rukovanju s nekoliko drugih različitih scenarija.

Regex može biti jednostavan kao korištenje abecede ili brojeva za podudaranje s datim nizom znakova ili kompleksa korištenjem kombinacije specijalnih znakova, kvantifikatora, klasa znakova, itd. za validaciju složenih formata ili traženje određenog uzorka u nizu znakova.

Ukratko, regularni izraz je prilično moćan alat za programera i pomaže u smanjenju količine koda koji je potreban za postizanje uparivanja podataka ili zadatka validacije.

IsMatch

Najjednostavniji i najkorisniji metod u klasi Regex je IsMatch metoda. Ova metoda ima različita preopterećenja za izvođenje uparivanja znakova na osnovu različitih parametara.

Najjednostavniji je

Zamijeni (tekst stringa, tekst zamjene stringa)

Metoda zamjene prihvaća dva parametara i vraća vrijednost niza. Prvi parametar je niz znakova ili regex koji želite da koristite za podudaranje, a drugi je zamjena regularnog izraza.

Metoda radi tako što pronalazi podudaranje datog teksta, a zatim ga zamjenjuje sa zamjenski tekst koji daje korisnik. Potpis metode je javni niz Zamijeni (tekst niza, tekst zamjene niza)

Javni niz[] Split (tekst niza)

Razdvojena metoda iz klase regex prihvata unos stringova kao parametar i vraća niz koji sadrži podstringove. Parametar koji je proslijeđen u metodi je niz koji treba podijeliti.

Metoda pronalazi odgovarajući ulazni uzorak u nizu i nakon što identificira bilo koji odgovarajući uzorak, dijeli niz na tom mjestu na manji podniz sa svaki odgovarajući uzorak je tačka preloma. Metoda zatim vraća niz koji sadrži sve podnizove.

Upotreba metoda Regex C#

Hajde da pogledamo upotrebu ovih metoda pisanjem jednostavnog programa.

public static void Main(string[] args) { string patternText = "Hello"; Regex reg = new Regex(patternText); //IsMatch(string input) Console.WriteLine(reg.IsMatch("Hello World")); //IsMatch(string input, int index) Console.WriteLine(reg.IsMatch("Hello", 0)); //IsMatch(string input, string pattern) Console.WriteLine(Regex.IsMatch("Hello World", patternText)); //Replace(string input, string replacement) Console.WriteLine(reg.Replace("Hello World", "Replace")); //Split(string input, string pattern) string[] arr = Regex.Split("Hello_World_Today", "_"); foreach(string subStr in arr) { Console.WriteLine("{0}", subStr); } }

Izlaz gore navedenogprogram

True

True

True

Zamijeni svijet

Zdravo

Svijet

Danas

Objašnjenje za gornji kod:

Na početku programa kreirali smo objekat i obrazac koji ćemo koristiti za podudaranje koda u sljedećem unosu niza, koristili smo formatiranje teksta da bi stvari bile jednostavne na početku, ali ako vam je ugodno, možete početi koristiti obrasce regularnih izraza. (Detaljno ćemo raspravljati o šablonu regularnog izraza dok idemo naprijed u ovom vodiču)

Zatim ćemo koristiti niz podudaranja za unos faktora koji smo deklarirali kao specificirani objekt sa ulaznim nizom i ako se podudara onda će se vratiti na false.

Sljedeća metoda koju smo koristili je IsMethod(string input, int index). Ovaj metod prihvata dva parametra, a ovde dajemo ulazni niz i indeks odakle utakmica mora da počne. Na primjer, ovdje smo željeli započeti uparivanje od početka ulaznog niza.

Zatim smo demonstrirali korištenje IsMatch(unos niza, uzorak niza). Ovdje smo dali ulazni niz, a zatim smo htjeli otkriti da li je tekst uzorka prisutan u ulazu ili ne. Ako je prisutan onda će vratiti true (kao u našem slučaju), inače će vratiti false.

Druga metoda o kojoj smo raspravljali je zamijenjena. Ova metoda je prilično korisna u programima u kojima želite da izvršite promene na ulaznim podacimaili promijenite format postojećih podataka.

Ovdje pružamo dva parametra, prvi je ulazni niz, a drugi je niz koji se može koristiti za zamjenu prethodnog niza. Ova metoda također koristi obrazac definiran u objektu regularnog izraza koji smo ranije definirali.

Još jedan važan metod koji smo koristili je split. Ova metoda se koristi za podjelu datog niza na osnovu nekih ponavljajućih obrazaca. Ovdje smo dali niz “Hello_World_Today”.

Recimo da želimo ukloniti donju crtu iz datog niza i dobiti podnizove. Za to specificiramo ulazni parametar, a zatim dajemo obrazac koji trebamo koristiti kao tačku razdvajanja. Metoda vraća niz i možemo koristiti jednostavnu petlju kao što je foreach da dohvatimo sve nizove.

Sintaksa regularnog izraza

Postoji nekoliko različitih sintaksa kao što su specijalni znakovi, kvantifikatori, klase znakova, itd. koji se može koristiti za podudaranje određenog uzorka iz datog unosa.

U ovom dijelu tutorijala, mi ćemo zaroniti duboko u sintaksu koju nudi regex i pokušat ćemo riješiti neke scenarije iz stvarnog života koristeći ih. Prije nego što nastavimo, uvjerite se da ste stekli osnovnu ideju o redovnom izrazu i različitim metodama dostupnim u klasi regex.

Posebni znakovi

Posebni znakovi u regularnom izrazu se koriste za dodjeljivanje nekoliko različitih značenja na obrazac. Sada ćemo pogledatineki od široko korištenih specijalnih znakova i njihovo značenje u Regex.3

Posebni znakovi Značenje
^ Ovo je jedna od najčešće korištenih sintaksa. Označava početak, riječ ili obrazac nakon što se ovo poklapa od početka unosnog teksta.
$ Ovaj znak se koristi za podudaranje riječi s kraja niza. Riječi/obrasci označeni prije ovog simbola će se podudarati s riječima prisutnim na kraju niza.
. (tačka) Tačka se koristi za podudaranje jednog znaka u datom nizu koji se pojavljuje jednom.
\n Ovo se koristi za novi red.
\d i \D Malo slovo 'd' se koristi za podudaranje znaka cifre, a veliko 'D' se koristi za podudaranje necifre znakova.
\s i \S Malo slovo 's' se koristi za podudaranje bijelih razmaka, a veliko 'S' se koristi za podudaranje ne-bijelog prostora .
\w i \W Malo slovo 'w' se koristi za podudaranje alfanumeričkih znakova/podvlaka, a veliko 'W' se koristi za podudaranje neriječi znakova.

Sintaksa kvantifikatora

Sintaksa kvantifikatora se koristi za brojanje ili kvantificiranje kriterija podudaranja. Na primjer, ako želite provjeriti da li određeni niz sadrži abecedu jednom ili više puta. Pogledajmo neke od najčešće korištenih kvantifikatora u Regularnom izrazu.

KvantifikatorSintaksa Značenje
* Ovaj simbol se koristi za podudaranje s prethodnim znakom.
+ Ovaj simbol se koristi za podudaranje jednog ili više znakova u nizu.
{n} Numerička cifra unutar kovrčavog zagrade se koriste za podudaranje s brojem prethodnog znaka definiranog numeričkim unutar vitičastih zagrada.
{n,} Koristi se broj unutar vitičastih zagrada i ovaj simbol kako biste bili sigurni da odgovara najmanje n (tj. brojčana vrijednost unutar zagrada).
{n, m} Ovaj simbol se koristi za podudaranje od prethodnog znaka iz n broj puta do m broj puta.
? Ovaj simbol čini da se prethodni znakovi podudaraju kao opcioni.

Klasa znakova

Klasa znakova je također poznata kao skupovi znakova, a koristi se da kaže mašini za regex da traži jedno podudaranje od nekoliko znakova. Klasa znakova će odgovarati samo jednom znaku i redoslijed znakova zatvorenih unutar skupa znakova nije bitan.

Klasa znakova Značenje
[ raspon ] Simbol uglaste zagrade koristi se za podudaranje za raspon znakova. Na primjer, možemo ga koristiti za definiranje bilo kojeg znaka u rasponu od abecede “a” do “z” zatvaranjem raspona unutar zagrade kao što je [a-z]

Ili, također možemo upariti s numeričkim “1” do “ 9” označavajućiizraze koristeći neke primjere u stvarnom vremenu.

Scenarij 1: Potvrdite da li je ulazni niz sastavljen od 6-cifrenih znakova abecede koji ne razlikuju velika i mala slova.

Najčešći scenario za regularni izraz je pronalaženje i podudaranje date riječi. Na primjer, recimo da želim nasumični abecedni niz od korisnika i taj unos bi trebao biti dugačak tačno 6 cifara.

Da bismo potvrdili da možemo koristiti jednostavan regularni izraz. Hajde da napišemo program da bolje razumijemo pisanje i upotrebu regularnog izraza.

public static void Main(string[] args) { string patternText = @"^[a-zA-Z]{6}$"; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch("Helios")); //When pattern doesnt match Console.WriteLine(reg.IsMatch("Helo")); }

Izlaz

Tačno

False

Objašnjenje

U ovom primjeru pokušavamo provjeriti valjanost ulaznog niza, kako bismo provjerili sadrži li šesterocifrene abecedne znakove. Znakovi mogu biti i malim i velikim slovima, tako da moramo uzeti u obzir i to.

Dakle, ovdje smo definirali obrazac regularnog izraza u promjenljivoj “patternText” i zatim ga prenijeli u regex objekat . Sada, sljedeći redovi koda su prilično jednostavni, koristili smo metodu IsMatch da uporedimo regularni izraz i ulazni niz.

Hajde da sada pogledamo regularni izraz koji smo osmislili. Izraz (^[a-zA-Z]{6}$) se sastoji od 4 različita dijela. “^”, “[a-zA-Z]”, “{6}” i “$”. Drugi dio označava podudarne znakove, koji se koriste za obavljanje podudaranja izraza, “a-z” za mala slova i “A-Z” za velika slova.

PrviZnak dijela “^” osigurava da niz počinje uzorkom definiranim u drugom dijelu, tj. malim i velikim slovima.

Vitičaste zagrade u trećem dijelu određuju broj znakova u nizu koji se može identificirati definisanim uzorkom, tj. 6 u ovom slučaju i simbolom “$” pobrinite se da se završava šablonom definiranim u drugom dijelu.

^[a-zA-Z]{6}$

Scenario 2: Koristite regularni izraz da potvrdite da riječ koja počinje sa “Super” i ima razmak nakon toga, tj. da potvrdite da li je “Super” prisutno na početku rečenice.

Pretpostavimo da čitamo neki korisnički unos i da moramo biti sigurni da korisnik uvijek započinje svoju rečenicu određenom riječju, brojem ili abecedom. Ovo se može postići prilično lako korištenjem jednostavnog regularnog izraza.

Pogledajmo primjer programa, a zatim detaljno razmotrimo kako napisati ovaj izraz.

 public static void Main(string[] args) { string patternText = @"^Super\s"; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch("Super man")); //When pattern doesnt match Console.WriteLine(reg.IsMatch("Superhero")); }

Izlaz

Tačno

Netačno

Objašnjenje

I u ovom primjeru koristili smo slično podešavanje koda kao u prvi. Obrazac regularnog izraza u ovom scenariju zahtijeva podudaranje s kombinacijom riječi ili rečenica koje počinju sa “Super”.

^Super

Dakle, kao što želimo da se podudaramo od početka riječi seriju, počećemo tako što ćemo staviti simbol “^”, a zatim ćemo dati obrazac koji želimo da uskladimo, u ovom slučaju, “Super”. Sada uzorak[1-9]

[^ raspon] Ovo označava klasu negiranih znakova. Koristi se za podudaranje bilo čega, a ne u rasponu označenom unutar zagrade.
\ Ovo se koristi za podudaranje specijalnih znakova koji mogu imati svoje vlastite simbole regularnog izraza. Kosa crta se koristi za podudaranje specijalnih znakova u njihovom doslovnom obliku.

Grupiranje

Okrugle zagrade ili zagrade mogu se koristiti za grupisanje dijela regularnog izraz zajedno. Ovo omogućava korisniku da ili doda kvantifikator sa izrazom.

Grupiranje Značenje
( grupa izraz ) Okrugle zagrade se koriste za grupisanje izraza.
znakova pa će koristiti simbol “+”. Kombinirajte ih i dobili smo simbol za prvi dio.
(\w+)

Zagrada je ovo odvojila na dijelove. Sljedeći dio je simbol tačke. Kako simbol tačke ima svoje značenje u redovnom izrazu, koristićemo obrnutu kosu crtu ispred njega da bismo mu dali doslovno značenje. Kombinirajte oba i imamo pokrivena prva dva dijela regularnog izraza.

(\w+)\.

Sada, za treći i posljednji dio, možemo direktno definirati potrebne ekstenzije datoteke odvojene sa “slova abecednih znakova. Ako želite, možete uključiti i numeričke ili velike abecedne znakove, ali u ovom scenariju ćemo ići s malim slovima.

Ako dodamo izraz za mala slova abecede dužine od 2 do 12 znakova, tada ćemo imati sljedeći izraz.

^[a-zA-Z0-9\._-]{5,25}.@.[a-z]{2,12}

Sada, ostaje nam samo izraz za ekstenziju domene, slično četvrtom scenariju, obradit ćemo neke specifične ekstenzije domena. Ako želite, možete ih dodati više tako što ćete ih zatvoriti u kružnu zagradu i odvojiti ih znakom "

Skrolaj na vrh