C# Regex Tutoriaal: Wat is 'n C# Gereelde Uitdrukking

Hierdie C# Regex-tutoriaal verduidelik wat 'n gewone uitdrukking in C# is, sy sintaksis, Regex-klasmetodes, en hoe om hierdie metodes te gebruik met behulp van voorbeelde:

Die gereelde uitdrukking in die C# word gebruik om 'n spesifieke karakterpatroon te pas. Gereelde uitdrukkings word gebruik wanneer 'n gebruiker een of ander herhalende patroon moet vind of 'n datavalidering moet doen of selfs om dataformatering na te gaan.

'n RegEx word gebruik om te bepaal of 'n string 'n gegewe karakterpatroon bevat of daarby pas. 'n Regeks is hoofsaaklik 'n karakterreeks wat 'n patroon aandui.

'n Patroon kan enigiets wees wat wissel van getalle, karakter of 'n kombinasie van almal. Regex word wyd gebruik vir validering. Ontleed of pas stringe, byvoorbeeld, om te vind of 'n string ooreenstem met geldeenheidformaat, telefoonnommer of datumformaat.

Regex-klas in C#

Regex-klas word in C# gebruik om regex-bewerkings uit te voer. Dit bevat verskeie verskillende metodes wat gebruik kan word om verskillende bewerkings uit te voer wat met regex verband hou.

Dit kan gebruik word om groot teks te ontleed om 'n spesifieke karakterreeks te vind deur metodes te gebruik wat gebruik kan word om 'n passing uit te voer, om vervang of kan gebruik word om die karakterreeks te verdeel.

Die regex-klas is binne die naamruimte teenwoordig; Stelsel.Teks. Gereelde Uitdrukking. Die klas aanvaar 'n string in die vorm van 'n karakterreeks as 'n parameter.

C# Regex Methods

dat ons “^Super” geskep het, kan ooreenstem met al die waardes van super, selfs superman of bonatuurlik, maar ons wil nie net die woord “Super” hê nie.

Dit beteken daar moet wit spasie na die woord wees om merk die einde van die woord en begin van 'n ander woord. Om dit te doen sal ons simbool “\s” by die patroon voeg en sodoende ons finale patroon maak as

^Super\s

Scenario 3: Gebruik Gereelde uitdrukking om geldige lêer te vind name met 'n prentlêertipe-uitbreiding.

Nog 'n belangrike intydse scenario wat ontwikkelaars dikwels in die gesig staar, is die validering van lêertipes. Kom ons sê ons het 'n oplaaiknoppie in die UI, wat slegs prentlêertipe-uitbreidings kan aanvaar.

Ons moet die gebruikeroplaailêer valideer en hom inlig indien hy die verkeerde lêerformaat opgelaai het. Dit kan maklik bereik word deur Gereelde uitdrukking te gebruik.

Hieronder word 'n eenvoudige program gegee om dit na te gaan.

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")); 

Uitvoer

Waar

Waar

Waar

Onwaar

Onwaar

Verduideliking

Hier moet ons 'n pas lêernaam. 'n Geldige lêernaam bestaan ​​uit drie dele ( naam van lêer + . + lêeruitbreiding ). Ons moet 'n gereelde uitdrukking skep om by al drie dele te pas. Kom ons begin deur die eerste deel te pas, dit wil sê die naam van die lêer. 'n Lêernaam kan alfanumeriese en spesiale karakters bevat.

Soos vroeër bespreek is die simbool om dit aan te dui "\w". Die lêernaam kan ook van een of meer weesgevolg deur 'n punt (.) dan die naam van die webwerf daarna 'n punt (.) en aan die einde 'n domein uitbreiding.

So, soortgelyk aan die vorige scenario sal ons probeer om dit deel vir deel te pas. . Kom ons begin eers deur "www." te pas. Deel. Ons begin dus met die beginsimbool, dan as "www." Dit is iets wat vas is, daarom gebruik ons ​​die beginsimbool gevolg deur die presiese woorde om te pas.

“^www.”

Dan sal ons aan die tweede deel begin werk. Die tweede deel van die webadres kan enige alfanumeriese naam wees. So, hier sal ons vierkantige hakies in die karakterklas gebruik om die reeks te definieer wat gepas moet word. Na die toevoeging van die tweede deel met die tweede deel sal ons gee.

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

Hier het ons ook krullerige hakies bygevoeg om die minimum en maksimum karakterlengte vir die webwerfnaam te definieer. Ons het 'n minimum van 3 en 'n maksimum van 20 gegee. Jy kan enige minimum of maksimum lengte gee wat jy wil.

Nou, nadat ons die eerste en tweede dele van die webadres gedek het, het ons net die laaste deel, dit wil sê domeinuitbreiding. Dit is baie soortgelyk aan wat ons in die laaste scenario gedoen het, ons sal direk ooreenstem met die domeinuitbreidings deur OR te gebruik en elke geldige domeinuitbreiding binne die omsendbriefhakie om te sluit.

As ons dus al hierdie byvoeg, sal ons hê 'n volledige gewone uitdrukking om by enige geldige webadres te pas.

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

Scenario 5: Gebruik Gereelde uitdrukking om 'ne-pos-ID-formaat

Kom ons neem aan dat ons 'n aanmeldvorm op ons webblad het wat die gebruikers vra om hul e-posadres in te voer. Om ooglopende redes sal ons nie wil hê dat ons vorm verder moet voortgaan met ongeldige e-posadresse nie. Om te bevestig of die e-posadres wat deur die gebruiker ingevoer is korrek is of nie, kan ons 'n gewone uitdrukking gebruik.

Hieronder is 'n eenvoudige program om 'n e-posadres te valideer.

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]")); }

Uitvoer

Waar

Waar

Onwaar

Verduideliking

A geldige e-posadres bevat alfabette, syfers en 'n paar spesiale karakters soos punt (.), streep (-) en onderstrepe (_) gevolg deur die "@"-simbool wat dan gevolg word deur die domeinnaam en domeinuitbreiding.

Ons kan dus die e-posadres in vier dele verdeel, dit wil sê e-pos-identifiseerder, "@"-simbool, die domeinnaam, en die laaste is die domeinuitbreiding.

Kom ons begin deur 'n gereelde uitdrukking vir die eerste deel. Dit kan alfanumeries wees met 'n paar spesiale karakters. Aanvaar dat ons 'n uitdrukkingsgrootte het wat wissel van 5 tot 25 karakters. Soortgelyk aan hoe ons dit vroeër geskryf het (in die e-pos scenario), kan ons met die volgende uitdrukking vorendag kom.

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

Beweeg nou na die tweede deel. Dit is relatief maklik aangesien ons net een simbool hoef te pas, dws "@". Deur dit by die uitdrukking hierbo te voeg gee ons.

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

Om na die derde deel te skuif, dws die domeinnaam sal altyd 'n reeks laer weesooreenstemmende woorde, alfabette, webwerf-adresse, e-pos-ID's en selfs lêertipes en -uitbreidings.

Hierdie scenario's is baie nuttig in intydse validering van gebruikersinsette sonder om talle reëls kode te skryf en help daardeur om tyd te bespaar en kompleksiteit te verminder. Hierdie voorbeelde is gebruik om die gebruiker te lei om hul eie stel gereelde uitdrukkings te skep en hulle sodoende te help om verskeie ander verskillende scenario's te hanteer.

Regex kan eenvoudig wees soos om alfabet of syfers te gebruik om by 'n gegewe reeks van karakters of kompleks deur 'n kombinasie van spesiale karakters, kwantifiseerders, karakterklasse, ens. te gebruik om komplekse formate te valideer of om 'n spesifieke patroon in die karakterreeks te soek.

In 'n neutedop, 'n gereelde uitdrukking is nogal 'n kragtige hulpmiddel vir 'n programmeerder en help om die hoeveelheid kode wat nodig is om te bereik in 'n datapassing of 'n valideringstaak te verminder.

IsMatch

Die eenvoudigste en nuttigste metode in die Regex-klas is die IsMatch-metode. Hierdie metode het verskillende oorladings vir die uitvoering van passing van karakters gebaseer op verskillende parameters.

Die eenvoudigste een is

Vervang(String teks, String vervangingTeks)

Die vervang metode aanvaar twee parameters en gee 'n stringwaarde terug. Die eerste parameter is die karaktervolgorde of regeks wat jy vir passing wil gebruik en die tweede een is die vervanging van die regex.

Die metode werk deur 'n passing van die gegewe teks te vind en vervang dit dan met die vervangingsteks wat deur die gebruiker verskaf is. Die metode handtekening is publieke string Vervang(string teks, string vervangingTeks)

Publieke string[] Split(string teks)

Die verdeel metode van die regex klas aanvaar string invoer as 'n parameter en gee 'n skikking wat substringe bevat. Die parameter wat in die metode deurgegee word, is die string wat verdeel moet word.

Die metode vind die ooreenstemmende invoerpatroon in die string en sodra dit enige ooreenstemmende patroon identifiseer, verdeel dit die string op daardie plek in kleiner substring met elke bypassende patroon is die breekpunt. Die metode gee dan 'n skikking terug wat al die substringe bevat.

Gebruik van Regex C#-metodes

Kom ons kyk na die gebruik van hierdie metodes deur 'n eenvoudige program te skryf.

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); } }

Die uitset van bogenoemdeprogram

Waar

Waar

Waar

Vervang Wêreld

Hallo

Wêreld

Vandag

Die verduideliking vir bogenoemde kode:

Aan die begin van die program het ons 'n voorwerp geskep en vir die patroon wat ons gaan gebruik vir die kode wat in die daaropvolgende string-invoer pas, het ons teksformatering gebruik om dinge aan die begin eenvoudig te hou, maar as jy gemaklik is, kan jy gewone uitdrukkingpatrone begin gebruik. (Ons sal gereelde uitdrukkingspatroon in detail bespreek soos ons vorentoe beweeg in hierdie tutoriaal)

Dan sal ons passtring gebruik om die faktor wat ons as die gespesifiseerde voorwerp verklaar het met die invoerstring in te voer en as dit ooreenstem dan sal dit terugkeer om vals terug te gee.

Die volgende metode wat ons gebruik het, is IsMethod (string invoer, int indeks). Hierdie metode aanvaar twee-parameters, en hier verskaf ons invoerstring en die indeks van waar die wedstryd moet begin. Byvoorbeeld, hier wou ons die passing begin vanaf die begin van die invoerstring.

Toe het ons die gebruik van IsMatch(stringinvoer, stringpatroon) gedemonstreer. Hier het ons die invoerstring verskaf, dan wou ons vind dat of die patroonteks in die invoer teenwoordig is of nie. As dit teenwoordig is, sal dit waar wees (soos in ons geval), anders sal dit vals terugstuur.

'n Ander metode wat ons bespreek het, word vervang. Hierdie metode is baie nuttig in programme waar jy veranderinge aan die invoerdata wil maakof verander die formaat van die bestaande data.

Hier verskaf ons twee parameters, die eerste een is die invoerstring en die tweede een is die string wat gebruik kan word om die vorige string te vervang. Hierdie metode gebruik ook die patroon wat gedefinieer is in die regex-objek wat ons vroeër gedefinieer het.

Nog 'n belangrike metode wat ons gebruik het, is verdeel. Hierdie metode word gebruik om die gegewe string op grond van sommige herhalende patrone te verdeel. Hier het ons 'n string "Hello_World_Today" verskaf.

Kom ons sê ons wil die onderstreep van die gegewe string verwyder en die substringe kry. Hiervoor spesifiseer ons die invoerparameter en dan gee ons die patroon wat ons as 'n splitspunt moet gebruik. Die metode gee 'n skikking terug en ons kan 'n eenvoudige lus soos foreach gebruik om al die snare te herwin.

Gereelde uitdrukking sintaksis

Daar is verskeie verskillende sintakse soos spesiale karakters, kwantifiseerders, karakterklasse, ens. wat gebruik kan word om 'n sekere patroon van 'n gegewe invoer te pas.

In hierdie deel van die tutoriaal gaan ons diep in die sintaksis wat deur regex aangebied word duik en sal probeer om 'n paar werklike scenario's op te los hulle te gebruik. Voordat ons voortgaan, maak seker dat jy die basiese idee van regex en die verskillende metodes wat beskikbaar is binne die regex-klas gekry het.

Spesiale karakters

Spesiale karakters in 'n regex word gebruik om verskeie verskillende betekenisse toe te ken. na 'n patroon. Ons sal nou kyk nasommige van die wyd gebruikte spesiale karakters en hul betekenis in Regex.3

Spesiale karakters Betekenis
^ Dit is een van die sintaksis wat die meeste gebruik word. Dit dui die begin, die woord of patroon hierna aan vanaf die begin van die invoerteks.
$ Hierdie teken word gebruik om woorde van die einde af te pas. van die tou. Woorde/patrone wat voor hierdie simbool aangedui word, sal ooreenstem met die woorde aan die einde van die string.
. (dot) Dot word gebruik om 'n enkele karakter in die gegewe string te pas wat een keer voorkom.
\n Dit word gebruik vir 'n nuwe lyn.
\d en \D Kleinletter 'd' word gebruik om 'n syferkarakter te pas en hoofletter 'D' word gebruik om nie-syfer te pas karakters.
\s en \S Kleinletters 's' word gebruik om wit spasies te pas en hoofletters 'S' word gebruik om nie-wit spasie te pas .
\w en \W Kleinletter 'w' word gebruik om alfanumeriese/onderstreepkarakters te pas en hoofletter 'W' word gebruik om nie-woord te pas karakters.

Kwantifiseerder-sintaksis

Kwantifiseerder-sintaksis word gebruik om die ooreenstemmende kriteria te tel of te kwantifiseer. Byvoorbeeld, as jy wil kyk of 'n spesifieke string 'n alfabet een of meer kere bevat. Kom ons kyk na sommige van die kwantifiseerders wat algemeen gebruik word in Gereelde uitdrukking.

KwantifiseerderSintaksis Betekenis
* Hierdie simbool word gebruik om by die voorafgaande karakter te pas.
+ Hierdie simbool word gebruik om een ​​of meer karakters in 'n ry te pas.
{n} Die numeriese syfer binne die krul hakies word gebruik om die nommer van die voorafgaande karakter te pas wat deur numeriese binne krulhakies gedefinieer word.
{n,} Die syfer binne krulhakies en hierdie simbool word gebruik om seker te maak dat dit by ten minste n pas (d.w.s. syferwaarde binne hakies).
{n, m} Hierdie simbool word gebruik vir ooreenstemming van vorige karakter van n aantal kere tot m aantal kere.
? Hierdie simbool maak dat voorafgaande karakters opsioneel pas.

Karakterklas

Die karakterklas staan ​​ook bekend as karakterstelle, en dit word gebruik om die regex-enjin te vertel om na 'n enkele pasmaat uit verskeie karakters te soek. 'n Karakterklas sal slegs by een karakter pas en die volgorde van die karakters wat binne die karakterstel ingesluit is maak nie saak nie.

Karakterklas Betekenis
[ reeks ] Die vierkantige hakiesimbool word gebruik om vir 'n reeks karakters te pas. Ons kan dit byvoorbeeld gebruik om enige karakter in die reeks van die alfabet "a" tot "z" te definieer deur die reeks binne die hakie in te sluit soos [a-z]

Of ons kan ook ooreenstem met numeriese "1" tot " 9” deur aan te duiuitdrukkings deur 'n paar intydse voorbeelde te gebruik.

Scenario 1: Bekragtig as die invoerstring saamgestel is uit 6-syfer hoofletter-onsensitiewe alfabetkarakters.

'n Mees algemene scenario vir gereelde uitdrukking is om 'n gegewe woord te vind en te pas. Byvoorbeeld, kom ons sê ek wil 'n ewekansige alfabetiese string van die gebruiker hê en daardie invoer moet presies 6-syfer lank wees.

Om dit te bekragtig kan ons 'n eenvoudige gewone uitdrukking gebruik. Kom ons skryf 'n program om die gewone uitdrukking skryf en gebruik op 'n beter manier te verstaan.

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")); }

Uitvoer

Waar

Onwaar

Verduideliking

In hierdie voorbeeld probeer ons om 'n invoerstring te valideer, om te kyk of dit ses-syfer-alfabetiese karakters bevat. Die karakters kan beide in klein- en hoofletters wees, so ons moet dit ook in ag neem.

So, hier het ons 'n gereelde uitdrukkingspatroon in veranderlike "patternText" gedefinieer en dit dan in die regex-objek deurgegee . Nou, die volgende reëls kode is redelik eenvoudig, ons het die IsMatch-metode gebruik om die gewone uitdrukking en die invoerstring te vergelyk.

Kom ons kyk nou na die gereelde uitdrukking wat ons uitgedink het. Die uitdrukking (^[a-zA-Z]{6}$) bestaan ​​uit 4 verskillende dele. “^”, “[a-zA-Z]”, “{6}” en “$”. Die tweede deel dui die ooreenstemmende karakters aan, wat gebruik word om uitdrukkingpassing uit te voer, "a-z" vir kleinletters en "A-Z" vir hoofletters.

Die eerstedeelkarakter “^” verseker dat die string begin met 'n patroon wat in die tweede deel gedefinieer is, d.w.s. klein- en hoofletters.

Die krulhakies in die derde deel bepaal die aantal karakters in die string wat geïdentifiseer kan word deur die gedefinieerde patroon d.w.s. 6 in hierdie geval en die “$”-simbool maak seker dat dit eindig met die patroon wat in die tweede deel gedefinieer is.

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

Scenario 2: Gebruik Gereelde uitdrukking om te bevestig dat 'n woord wat met "Super" begin en daarna wit spasie het, dit wil sê om te bevestig of "Super" aan die begin van 'n sin teenwoordig is.

Kom ons neem aan ons lees 'n paar gebruikersinsette en moet seker maak dat die gebruiker altyd hul sin met 'n spesifieke woord, nommer of alfabet begin. Dit kan redelik maklik bereik word deur 'n eenvoudige reëlmatige uitdrukking te gebruik.

Kom ons kyk na 'n voorbeeldprogram en bespreek dan in detail hoe om hierdie uitdrukking te skryf.

 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")); }

Uitvoer

Waar

Onwaar

Verduideliking

Ook in hierdie voorbeeld het ons 'n soortgelyke kode-opstelling gebruik as wat ons in die eerste een. Die gereelde uitdrukkingspatroon in hierdie scenario vereis passing met 'n kombinasie van woorde of sinne wat met “Super” begin.

^Super

So, soos ons wil pas vanaf die begin van die woord reeks, sal ons begin deur die "^" simbool te plaas, dan sal ons die patroon gee wat ons wil pas, in hierdie geval, "Super". Nou die patroon[1-9]

[^ reeks] Dit dui op negate karakter klas. Dit word gebruik om enigiets te pas, nie in die reeks wat binne die hakie aangedui word nie.
\ Dit word gebruik om spesiale karakters te pas wat hul eie regeks-simbole kan hê. Die skuinsstreep word gebruik om die spesiale karakters in hul letterlike vorm te pas.

Groepering

Ronde hakies of hakies kan gebruik word om 'n deel van die gewone te groepeer uitdrukking saam. Dit laat die gebruiker toe om óf 'n kwantifiseerder met die uitdrukking by te voeg.

Groeping Betekenis
( groep uitdrukking ) Die ronde hakies word gebruik om 'n uitdrukking te groepeer.
karakters sal dus die simbool “+” gebruik. Kombineer hulle en ons kry die simbool vir die eerste deel.
(\w+)

Hakkie het dit in dele geskei. Die volgende deel is die puntsimbool. Aangesien die puntsimbool sy betekenis in 'n regeks het, sal ons 'n terugskuinsstreep voor dit gebruik om dit 'n letterlike betekenis te gee. Kombineer albei en ons het die eerste twee dele van die regex gedek.

(\w+)\.

Nou, vir die derde en laaste deel, kan ons die vereiste lêeruitbreidings direk definieer, geskei deur "hoofletters alfabetiese karakters. As jy wil, kan jy ook numeriese of hoofletters alfabetiese karakters insluit, maar vir hierdie scenario sal ons met kleinletter alfabette gaan.

As ons die uitdrukking byvoeg vir kleinletteralfabette met lengte wat wissel van 2 tot 12 karakters, dan sal ons die volgende uitdrukking hê.

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

Nou bly ons net met die uitdrukking vir domeinuitbreiding, soortgelyk aan die vierde scenario, ons sal 'n paar spesifieke domeinuitbreidings hanteer. As jy wil, kan jy meer van hulle byvoeg deur hulle in 'n sirkelvormige hakie te sluit en hulle te skei met 'n "

Rol na bo