C# Regex Tutorial: Mis on C# regulaaravaldis

See C# Regexi õpetus selgitab, mis on regulaaravaldis C# keeles, selle süntaks, Regexi klassi meetodid ja kuidas neid meetodeid näidete abil kasutada:

Regulaaravaldist kasutatakse C# keeles konkreetse tähemustri sobitamiseks. Regulaaravaldisi kasutatakse alati, kui kasutajal on vaja leida mõni korduv muster või teha andmete valideerimine või isegi andmete vormindamise kontrollimine.

RegExi kasutatakse selleks, et leida, kas string sisaldab või vastab antud tähemustrile. Regex on eelkõige tähemärkide jada, mis tähistab mustrit.

Muster võib olla mis tahes, alates numbritest, tähemärkidest või nende kombinatsioonist. Regexi kasutatakse laialdaselt valideerimiseks. Parsimiseks või stringide sobitamiseks, näiteks, leida, kas string vastab valuutaformaadile, telefoninumbrile või kuupäevaformaadile.

Regex klass C# keeles

Regex klassi kasutatakse C# keeles regex operatsioonide teostamiseks. See sisaldab mitmeid erinevaid meetodeid, mida saab kasutada erinevate regexiga seotud operatsioonide teostamiseks.

Seda saab kasutada suure teksti analüüsimiseks, et leida konkreetne tähemärkide jada, kasutades meetodeid, mida saab kasutada sobitamise, asendamise või tähemärkide jada jagamiseks.

Regex klass on olemas nimeruumi sees; System.Text.RegularExpression. Klass võtab parameetrina vastu stringi tähemärkide jada kujul.

C# Regex meetodid

IsMatch

Kõige lihtsam ja kasulikum meetod klassis Regex on meetod IsMatch. Sellel meetodil on erinevad ülekoormused märkide sobitamise teostamiseks erinevate parameetrite alusel.

Kõige lihtsam on

Replace(String text, String replacementText)

Meetod replace võtab vastu kaks parameetrit ja tagastab stringi väärtuse. Esimene parameeter on tähemärkide jada või regex, mida soovite vastamiseks kasutada, ja teine on regexi asendus.

Meetod töötab nii, et leiab antud tekstile vaste ja seejärel asendab selle kasutaja poolt esitatud asendustekstiga. Meetodi allkiri on järgmine public string Replace(string text, string replacementText)

Public string[] Split(string text)

Regex-klassi meetod split võtab parameetrina vastu stringi sisendi ja tagastab alamsõnu sisaldava massiivi. Meetodi parameetriks on string, mida tuleb jagada.

Meetod leiab stringist sobiva sisendmustri ja kui ta tuvastab mõne sobiva mustri, jagab ta stringi selles kohas väiksemateks alamjoonisteks, kusjuures iga sobiv muster on murdepunkt. Seejärel tagastab meetod massiivi, mis sisaldab kõiki alamjooni.

Regex C# meetodite kasutamine

Vaatame nende meetodite kasutamist, kirjutades lihtsa programmi.

 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, stringasendamine) Console.WriteLine(reg.Replace("Hello World", "Asenda")); //Split(string input, string pattern) string[] arr = Regex.Split("Hello_World_Today", "_"); foreach(string subStr in arr) { Console.WriteLine("{0}", subStr); } } 

Ülaltoodud programmi väljund

Tõsi

Tõsi

Tõsi

Asenda maailm

Tere

Maailm

Täna

Selgitus ülaltoodud koodile:

Programmi alguses oleme loonud objekti ja mustri jaoks, mida kasutame koodi sobitamiseks järgnevas stringi sisestuses, oleme kasutanud tekstivormingut, et hoida asjad alguses lihtsad, kuid kui teil on mugav, võite hakata kasutama regulaaravaldiste mustreid. (Regulaaravaldiste mustreid arutame üksikasjalikult, kui liigume selles õpetuses edasi).

Seejärel kasutame match string sisestada tegur, et me oleme deklareeritud kui määratud objekti sisend string ja kui see sobib, siis see tagastab tagastada false.

Järgmine meetod, mida me kasutasime, on IsMethod(string input, int index). See meetod võtab vastu kaks parameetrit ja siin anname sisendstringi ja indeksi, millest peab vastama. Näiteks, siin soovisime alustada sobitamist sisendstringi algusest.

Seejärel demonstreerisime IsMatch(string input, string pattern) kasutamist. Siin andsime sisendstringi, siis tahtsime leida, et kas mustritekst on sisendis olemas või mitte. Kui see on olemas, siis tagastab see true (nagu meie puhul), muidu tagastab false.

Teine meetod, mida me arutasime, on asendatud. See meetod on üsna kasulik programmides, kus soovite teha muudatusi sisendandmetes või muuta olemasolevate andmete formaati.

Siin anname kaks parameetrit, millest esimene on sisendstring ja teine on string, mida saab kasutada eelmise stringi asendamiseks. See meetod kasutab ka varem defineeritud regex-objektis defineeritud mustrit.

Teine oluline meetod, mida me kasutasime, on split. Seda meetodit kasutatakse antud stringi jagamiseks teatud korduvate mustrite alusel. Siin oleme andnud stringi "Hello_World_Today".

Oletame, et tahame antud stringist eemaldada allkriipsu ja saada alajaotused. Selleks määrame sisendparameetriks ja seejärel anname mustri, mida soovime kasutada jagamispunktina. Meetod tagastab massiivi ja me saame kasutada lihtsat loop'i nagu foreach, et saada kõik stringid kätte.

Regulaaravaldise süntaks

On mitmeid erinevaid süntaksiid, nagu erimärgid, kvantifikaatorid, tähemärgiklassid jne, mida saab kasutada teatud mustri sobitamiseks antud sisendist.

Selles õpetuse osas sukeldume sügavale regexi pakutavasse süntaksisse ja proovime lahendada mõningaid reaalseid stsenaariume nende abil. Enne kui jätkame, veenduge, et olete omandanud regexi põhiidee ja regexi klassis saadaval olevad erinevad meetodid.

Erimärgid

Regexis kasutatavaid erimärke kasutatakse selleks, et omistada mustrile mitmeid erinevaid tähendusi. Vaatleme nüüd mõningaid laialdaselt kasutatavaid erimärke ja nende tähendust Regexis.3

Erimärgid Tähendus
^ See on üks enim kasutatavatest süntaksitest. See tähistab algust, sõna või muster pärast seda algab sobitamine sisendteksti algusest.
$ Seda märki kasutatakse sõnade sobitamiseks stringi lõpust. Enne seda märki märgitud sõnad/mustrid sobivad stringi lõpus olevate sõnadega.
. (punkt) Punkti kasutatakse selleks, et sobitada antud stringis üks kord esinev üksikmärk.
\n Seda kasutatakse uue liini puhul.
\d ja \D Väikest "d" kasutatakse numbrimärkide vastamiseks ja suurt "D" kasutatakse mittenumbriliste märkide vastamiseks.
\s ja \S Väike "s" kasutatakse valgete tühikute ja suur "S" mittevalge tühiku tähistamiseks.
\w ja \W Väikest "w" kasutatakse tähtnumbriliste/tähtedeta tähtede ja suurtähtedega "W" kasutatakse mittesõnaliste märkide sobitamiseks.

Kvantifikaatori süntaks

Kvantifikaatori süntaksit kasutatakse sobituskriteeriumide loendamiseks või kvantifitseerimiseks. Näiteks, kui soovite kontrollida, kas teatud string sisaldab tähestikku ühe või mitu korda. Vaatame mõningaid tavaliselt kasutatavaid kvantifikaatoreid regulaaravaldises.

Kvantifikaatori süntaks Tähendus
* Seda sümbolit kasutatakse eelneva tähemärgi sobitamiseks.
+ Seda sümbolit kasutatakse ühe või mitme tähemärgi sobitamiseks järjest.
{n} Numbrit, mis on sulgesulgude sees, kasutatakse eelneva numbriga määratletud numbrilise tähemärgi numbrile vastavaks, mis on määratletud sulgesulgude sees oleva numbriga.
{n,} Numbrile, mis on sulgesulgude sees ja seda sümbolit kasutatakse selleks, et veenduda, et see vastab vähemalt n-le (st numbrile, mis on sulgesulgude sees).
{n, m} Seda sümbolit kasutatakse eelneva tähemärgi sobitamiseks n-kordselt kuni m-kordselt.
? See sümbol muudab eelnevad tähemärgid vabatahtlikuks.

Iseloomu klass

Märkide klass on tuntud ka kui märgikomplektid ja seda kasutatakse selleks, et öelda regex-mootorile, et ta otsiks mitmest märgist ühte vastet. Märkide klass vastab ainult ühele märgile ja märgikomplekti sees olevate märkide järjekord ei ole oluline.

Iseloomu klass Tähendus
[vahemik] Ruudukujulise nurksulguri sümbolit kasutatakse tähemärkide vahemiku sobitamiseks. Näiteks saame seda kasutada mis tahes tähemärgi määratlemiseks tähestiku "a" kuni "z" vahemikus, sulgedes vahemiku sulguri sisse, näiteks [a-z].

Või võime ka sobitada numbrilise "1" kuni "9", tähistades [1-9].

[^ vahemik] See tähistab eitav tähemärkide klassi. Seda kasutatakse, et sobitada kõike, mis ei kuulu sulgudes märgitud vahemikku.
\ Seda kasutatakse erimärkide sobitamiseks, millel võivad olla oma regex-sümbolid. Kaldkriipsu kasutatakse erimärkide sobitamiseks nende sõnasõnalisel kujul.

Grupeerimine

Regulaaravaldise osa rühmitamiseks saab kasutada ümarsulgusid või sulgusid. See võimaldab kasutajal kas lisada väljendi juurde kvantifikaatori.

Grupeerimine Tähendus
( grupiväljend ) Ümarad sulgudes kasutatakse väljendi rühmitamiseks.
The

C# regulaaravaldise näited

Eelmises jaotises õppisime tundma regulaaravaldise sümboleid, selles jaotises vaatame üksikasjalikult erinevate sümbolite kasutamist regulaaravaldises ja kombinatsiooni, milles neid saab kasutada erinevate väljendite sobitamiseks.

Selles õpetuses arutame mõningaid kõige sagedamini esinevaid tegelikke stsenaariume, millega te arendajana mõne rakenduse kallal töötades või lihtsas programmis kasutaja sisendi saamiseks kokku puutute.

Regulaaravaldise näide reaalsete stsenaariumidega

Õpime rohkem regulaaravaldiste kohta, kasutades mõningaid reaalajas kasutatavaid näiteid.

Stsenaarium 1: valideerida, kas sisestusstring koosneb 6-kohalistest tähestiku tähemärkidest, mille puhul ei ole oluline, kas suur- või väiketähestik.

Kõige tavalisem stsenaarium regulaaravaldise jaoks on antud sõna leidmine ja sobitamine. Näiteks, ütleme, et ma tahan kasutajalt juhuslikku tähestikujada ja see sisend peaks olema täpselt 6-kohaline.

Selle kinnitamiseks saame kasutada lihtsat regulaaravaldist. Kirjutame programmi, et paremini mõista regulaaravaldise kirjutamist ja kasutamist.

 public static void Main(string[] args) { string patternText = @"^[a-zA-Z]{6}$"; Regex reg = new Regex(patternText); //Kui muster vastab Console.WriteLine(reg.IsMatch("Helios")); //Kui muster ei vasta Console.WriteLine(reg.IsMatch("Helo")); } 

Väljund

Tõsi

Vale

Selgitus

Selles näites püüame valideerida sisestusstringi, et kontrollida, kas see sisaldab kuuekohalisi tähemärke. Tähemärgid võivad olla nii väike- kui ka suurtähtedega, seega peame ka seda arvesse võtma.

Niisiis, siin me defineerisime regulaaravaldise mustri muutujasse "patternText" ja siis edastasime selle regex objektile. Nüüd, järgmised koodiread on üsna lihtsad, me kasutasime meetodit IsMatch, et võrrelda regulaaravaldist ja sisestatud stringi.

Vaatame nüüd välja mõeldud regulaaravaldist. Väljend (^[a-zA-Z]{6}$) koosneb neljast erinevast osast: "^", "[a-zA-Z]", "{6}" ja "$". Teine osa tähistab sobitusmärke, mida kasutatakse väljendi sobitamise teostamiseks, "a-z" väikeste tähtede puhul ja "A-Z" suurte tähtede puhul.

Esimese osa märk "^" tagab, et string algab teises osas määratletud mustriga, st väike- ja suurtähtedega.

Kolmandas osas olevad kumerad sulud määravad kindlaks, mitu märki stringis on, mida saab tuvastada määratletud mustri järgi, st antud juhul 6, ja sümbol "$" tagab, et see lõpeb teises osas määratletud mustriga.

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

Stsenaarium 2: Kasutage regulaaravaldist, et kontrollida, kas sõna, mis algab sõnaga "Super" ja mille järel on tühik, st kontrollida, kas "Super" on lause alguses.

Oletame, et loeme mingit kasutaja sisendit ja peame tagama, et kasutaja alustab oma lauset alati mingi kindla sõna, numbri või tähestikuga. Seda saab üsna lihtsalt saavutada lihtsa regulaaravaldise abil.

Vaatame näidisprogrammi ja seejärel arutame üksikasjalikult, kuidas seda väljendit kirjutada.

 public static void Main(string[] args) { string patternText = @"^Super\s"; Regex reg = new Regex(patternText); //Kui muster sobib Console.WriteLine(reg.IsMatch("Supermees")); //Kui muster ei sobi Console.WriteLine(reg.IsMatch("Superhero")); } 

Väljund

Tõsi

Vale

Selgitus

Ka selles näites kasutasime sarnast koodi ülesehitust nagu esimeses näites. Regulaaravaldise muster selles stsenaariumis nõuab sobitamist sõnade või lausete kombinatsiooniga, mis algavad sõnaga "Super".

^Super

Niisiis, kuna me tahame sobitada sõnasarja algusest, siis alustame sümboli "^" panemisega, seejärel anname mustri, millele tahame sobitada, antud juhul "Super". Nüüd muster, mille me lõime "^Super", võib sobida kõigi super väärtustega, isegi superman või supernatural, kuid me ei taha ainult sõna "Super".

See tähendab, et pärast sõna peaks olema valge tühik, mis tähistab sõna lõppu ja teise sõna algust. Selleks lisame mustrisse sümboli "\s" ja teeme sellega meie lõpliku mustri järgmiselt.

^Super\s

Stsenaarium 3: Kasutage regulaaravaldist, et leida kehtivaid failinimesid, millel on pildifaili tüübi laiendus.

Teine oluline reaalajas toimuv stsenaarium, millega arendajad sageli silmitsi seisavad, on failitüüpide valideerimine. Oletame, et meil on kasutajaliideses üleslaadimisnupp, mis saab vastu võtta ainult pildifaili tüüpi laiendusi.

Me peame valideerima kasutaja üleslaaditud faili ja teavitama teda juhul, kui ta laadis üles vale failiformaadi. Seda saab hõlpsasti saavutada, kasutades regulaaravaldist.

Allpool on toodud lihtne programm selle kontrollimiseks.

 public static void Main(string[] args) gif)$"; Regex reg = new Regex(patternText); //Kui muster vastab Console.WriteLine(reg.IsMatch("abc.jpg")); Console.WriteLine(reg.IsMatch("ab_c.gif")); Console.WriteLine(reg.IsMatch("abc123.png")); //Kui muster ei vasta Console.WriteLine(reg.IsMatch(".jpg")); Console.WriteLine(reg.IsMatch("ask.jpegj")); 

Väljund

Tõsi

Tõsi

Tõsi

Vale

Vale

Selgitus

Siinkohal peame sobitama failinime. Kehtiv failinimi koosneb kolmest osast ( faili nimi + . + faili laiendus ). Peame looma regulaaravaldise, mis sobiks kõigi kolme osaga. Alustame esimese osaga, st faili nimega. Faili nimi võib sisaldada tähtnumbrilisi ja erimärke.

Nagu varem arutatud, on selle tähistamiseks sümbol "\w". Samuti võib failinimi olla ühest või mitmest tähemärgist, seega kasutame sümbolit "+". Kombineerides neid, saame sümboli esimese osa jaoks.

 (\w+) 

Bracket eraldas selle osadeks. Järgmine osa on punkti sümbol. Kuna punkti sümbolil on regexis oma tähendus, siis kasutame enne seda tagurpidi kaldkriipsu, et anda sellele sõna-sõnaline tähendus. Kombineerime mõlemad ja meil on regexi kaks esimest osa kaetud.

 (\w+)\. 

Nüüd, kolmanda ja viimase osa puhul, saame otse defineerida nõutavad faililaiendid, mis on eraldatud "

 (\w+)\.(jpg 

Kui me nüüd seda programmis kasutame, näeme, et see vastab õigele vormingule ja tagastab true, kuid kehtetute vormingute puhul tagastab false.

Stsenaarium 4: Regulaaravaldise kasutamine veebisaidi aadressi vormingu valideerimiseks

Oletame, et meil on veebivorm, mis võtab vastu veebiaadressi või domeeni aadressi. Me tahame, et kasutaja sisestaks vormi täites õige veebi/domeeni aadressi. Selleks, et teha kindlaks, kas kasutaja on sisestanud õige veebiaadressi, võib regulaaravaldis olla üsna kasulik.

 public static void Main(string[] args) { string patternText = @"^www.[a-zA-Z0-9]{3,20}.(com 

Väljund

Tõsi

Vale

Selgitus

Siinkohal tahame sobitada kehtivat domeeninime regulaaravaldise abil. Kehtiv domeeninimi algab lühendiga "www", millele järgneb punkt (.), seejärel veebilehe nimi, seejärel punkt (.) ja lõpus domeenilaiend.

Nii et sarnaselt eelmise stsenaariumiga proovime sobitada seda osa kaupa. Alustame kõigepealt sobitamisega "www." Part. Nii et alustame algussümboliga, siis nagu "www." See on midagi, mis on fikseeritud, nii et kasutame algussümboli, millele järgnevad täpsed sõnad, et sobitada.

 "^www." 

Seejärel alustame tööd teise osaga. Veebiaadressi teine osa võib olla ükskõik milline tähtnumbriline nimi. Seega kasutame siinkohal märkide klassis esinevaid nurksulgusid, et määratleda vahemik, mida tuleb sobitada. Pärast teise osa lisamist koos teise osaga annab meile.

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

Siinkohal oleme lisanud ka kumerad sulgud, et määratleda veebilehe nime minimaalne ja maksimaalne tähemärgi pikkus. Me oleme andnud minimaalseks pikkuseks 3 ja maksimaalseks 20. Te võite anda mis tahes minimaalse või maksimaalse pikkuse, mida soovite.

Nüüd, kui oleme käsitlenud veebiaadressi esimest ja teist osa, jääb meile alles viimane osa, st domeeni laiend. See on üsna sarnane sellega, mida tegime eelmises stsenaariumis, me sobitame otse domeeni laiendustega, kasutades OR ja sulgedes iga kehtiva domeeni laienduse ümmarguse sulguri sisse.

Seega, kui me lisame need kõik kokku, saame täieliku regulaaravaldise, mis vastab igale kehtivale veebiaadressile.

 www.[a-zA-Z0-9]{3,20}.(com 

Stsenaarium 5: Regulaaravaldise kasutamine e-posti id-vormingu valideerimiseks

Oletame, et meie veebilehel on sisselogimisvorm, mis palub kasutajatel sisestada oma e-posti aadress. Selgetel põhjustel ei taha me, et meie vorm jätkaks kehtetute e-posti aadressidega. Selleks, et kontrollida, kas kasutaja poolt sisestatud e-posti aadress on õige või mitte, saame kasutada regulaaravaldist.

Allpool on esitatud lihtne programm e-posti aadressi valideerimiseks.

 public static void Main(string[] args) { string patternText = @"^[a-zA-Z0-9\._-]{5,25}.@.[a-z]{2,12}.(com 

Väljund

Tõsi

Tõsi

Vale

Selgitus

Kehtiv e-posti aadress sisaldab täpitähti, numbreid ja mõningaid erimärke, nagu punkt (.), kriips (-) ja allakriips (_), millele järgneb sümbol "@", millele järgneb domeeninimi ja domeenilaiend.

Seega võime jagada e-posti aadressi neljaks osaks, s.o e-posti identifikaatoriks, "@" sümboliks, domeeninimeks ja viimaseks domeenilaiendiks.

Alustame esimese osa jaoks regulaaravaldise kirjutamisest. See võib olla tähtnumbriline koos mõne erimärgiga. Oletame, et meil on väljendi suurus vahemikus 5 kuni 25 tähemärki. Sarnaselt sellega, kuidas me seda varem kirjutasime (e-posti stsenaariumi puhul), saame välja tulla järgmise väljendi.

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

Nüüd liigume teise osa juurde. See on suhteliselt lihtne, sest meil on vaja sobitada ainult üks sümbol, st "@". Selle lisamine ülaltoodud väljendile annab meile.

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

Üleminek kolmandasse ossa, st domeeninimi on alati rida väikseid tähemärke. Kui soovite, võite lisada ka numbrilisi või suuri tähemärke, kuid selle stsenaariumi puhul kasutame väikseid tähemärke.

Kui me lisame väljendi väiketähtede jaoks, mille pikkus on 2 kuni 12 tähemärki, siis saame järgmise väljendi.

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

Nüüd on meil jäänud vaid domeenilaiendi väljendus, sarnaselt neljanda stsenaariumiga käsitleme mõned konkreetsed domeenilaiendid. Kui soovite, võite lisada neid rohkem, sulgedes need ümbersulgude sisse ja eraldades neid "

Selle väljendi konsolideerimine eelmise väljendi abil annab meile meie lõpliku väljendi väärtuse e-posti valideerimiseks.

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

Kokkuvõte

Selles õpetuses õppisime, mis on regulaaravaldis koos süntaksiga/sümbolitega, mida kasutatakse regulaaravaldise tähistamiseks, ehitamiseks. Regulaaravaldis võimaldab kasutajal sobitada stringi antud mustriga.

See on üsna kasulik olukordades, mis nõuavad sisendi kiiret valideerimist, näiteks kui kasutaja sisestab oma e-posti aadressi või telefoninumbri, saab regexi kasutada formaadi kiireks valideerimiseks ja kasutaja teavitamiseks, kui kasutaja on sisestanud vale formaadi.

Samuti õppisime tegelema erinevate stsenaariumidega, mida saab kasutada erinevate rakenduste puhul. Vaatasime samm-sammult, kuidas kirjutada väljendeid sõnade, tähestike, veebisaidi aadresside, e-posti tunnuste ja isegi failitüüpide ja laienduste sobitamiseks.

Need stsenaariumid on üsna kasulikud kasutaja sisendite reaalajas valideerimisel ilma arvukate koodiridade kirjutamiseta ning aitavad seega aega säästa ja vähendada keerukust. Neid näiteid on kasutatud selleks, et juhendada kasutajat oma regulaaravaldiste komplekti loomisel ja seega aidata neil käsitleda mitmeid teisi erinevaid stsenaariume.

Regex võib olla lihtne, näiteks tähestiku või numbrite kasutamine antud tähemärkide seeria sobitamiseks, või keeruline, kasutades erimärkide, kvantifikaatorite, tähemärkide klasside jne kombinatsiooni, et valideerida keerulisi vorminguid või otsida tähemärkide seeriast konkreetset mustrit.

Lühidalt öeldes on regulaaravaldis programmeerija jaoks üsna võimas tööriist, mis aitab vähendada koodimahtu, mida on vaja andmete sobitamise või valideerimisülesande täitmiseks.

Keri üles