c regex tutorial what is c regular expression
Denne C # Regex-opplæringen forklarer hva som er et vanlig uttrykk i C #, syntaksen, Regex-klassemetoder, og hvordan du bruker disse metodene ved hjelp av eksempler:
Det vanlige uttrykket i C # brukes til å matche et bestemt tegnmønster. Vanlige uttrykk brukes når en bruker trenger å finne et gjentatt mønster eller foreta en datavalidering eller til og med for å sjekke dataformatering.
En RegEx brukes til å finne ut om en streng inneholder eller samsvarer med et gitt tegnmønster. En regex er først og fremst en tegnsekvens som betegner et mønster.
Et mønster kan være alt fra tall, karakter eller en kombinasjon av alle. Regex er mye brukt for validering. Analyse eller samsvarende strenger, for eksempel, å finne ut om en streng samsvarer med valutaformat, telefonnummer eller datoformat.
=> Les gjennom Easy C # Training Series.
kvalitetssikringsanalytiker intervju spørsmål og svar
Hva du vil lære:
Regex klasse i C #
Regex-klasse brukes i C # for å utføre regex-operasjoner. Den inneholder flere forskjellige metoder som kan brukes til å utføre forskjellige operasjoner relatert til regex.
Den kan brukes til å analysere stor tekst for å finne en bestemt tegnsekvens ved å bruke metoder som kan brukes til å utføre en kamp, for å erstatte eller kan brukes til å dele tegnsekvensen.
Regex-klassen er tilstede inne i navneområdet; System.Text.RegularExpression. Klassen aksepterer en streng i form av en tegnsekvens som parameter.
C # Regex-metoder
IsMatch
Den enkleste og mest nyttige metoden i Regex-klassen er IsMatch-metoden. Denne metoden har forskjellige overbelastninger for å utføre samsvar av tegn basert på forskjellige parametere.
Den enkleste er IsMatch (strengtekst) , lar denne metoden brukeren gi en tegnsekvens for å matche en streng.
Den andre overbelastningen IsMatch (strengtekst, int-posisjon). Denne metoden returnerer en boolsk verdi og tar to parametere (streng og heltall). Strengteksten spesifisert i parameteren er i utgangspunktet en regex-konstruktør som vil matche med tegnsekvensen fra startposisjonen spesifisert av heltallsparameteren.
Dermed vil denne metoden prøve å matche strenginngangen på posisjonen som er gitt av et heltallsparameter i en gitt streng.
Den tredje overbelastningen, IsMatch (strengtekst, strengmønster) aksepterer to parametere og returnerer en boolsk verdi. Den første parameteren er tekst der brukeren trenger å finne et mønster, og den neste parameteren gir mønsteret som brukeren søker i den gitte teksten.
Anbefalt lesing = >> Mønster matching i MySQL
Erstatt (strengtekst, strengutskiftingstekst)
Erstatningsmetoden godtar to parametere og returnerer en strengverdi. Den første parameteren er tegnsekvensen eller regexen du vil bruke til samsvar, og den andre er erstatningen for regex.
Metoden fungerer ved å finne et samsvar med den gitte teksten, og erstatter den deretter med erstatningsteksten gitt av brukeren. Metodesignaturen er offentlig streng Erstatt (strengtekst, streng erstatningstekst)
Offentlig streng () Delt (strengtekst)
Delingsmetoden fra regex-klassen godtar strenginngang som parameter og returnerer en matrise som inneholder understreng. Parameteren som sendes i metoden er strengen som må deles.
Metoden finner det matchende inngangsmønsteret i strengen, og når den identifiserer noe matchende mønster, deler den strengen på det stedet i mindre understreng med hvert matchende mønster som brytpunkt. Metoden returnerer deretter en matrise som inneholder alle understrengene.
Bruk av Regex C # -metoder
La oss ta en titt på bruken av disse metodene ved å skrive et enkelt program.
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); } }
Resultatet av programmet ovenfor
ekte
ekte
ekte
Erstatt verden
Hallo
Verden
I dag
Forklaringen på ovennevnte kode:
Ved starten av programmet har vi opprettet et objekt, og for mønsteret vi skal bruke for kodematching i den påfølgende strenginngangen, har vi brukt tekstformatering for å holde ting enkelt i begynnelsen, men hvis du er komfortabel kan du begynn å bruke mønstre for vanlige uttrykk. (Vi vil diskutere regulært uttrykksmønster i detalj når vi går videre i denne opplæringen)
Deretter vil vi bruke samsvarstreng til å legge inn faktoren som vi har erklært som det angitte objektet med inngangsstrengen, og hvis den samsvarer, vil den returnere for å returnere falsk.
Den neste metoden vi brukte er IsMethod (strenginngang, int-indeks). Denne metoden godtar to-parameter, og her gir vi inngangsstreng og indeksen der matchen skal starte. For eksempel, her ønsket vi å starte matchingen fra starten av inngangsstrengen.
Så demonstrerte vi bruken av IsMatch (strenginngang, strengmønster). Her ga vi inngangsstrengen, så ønsket vi å finne ut at hvis mønsterteksten er tilstede i inngangen eller ikke. Hvis det er nå, vil det returnere sant (som i vårt tilfelle) ellers vil det returnere falskt.
En annen metode som vi diskuterte erstattes. Denne metoden er ganske nyttig i programmer der du vil gjøre endringer i inngangsdataene eller endre formatet på eksisterende data.
Her gir vi to parametere, den første er inngangsstrengen og den andre er strengen som kan brukes til å erstatte den forrige strengen. Denne metoden bruker også mønsteret som er definert i regex-objektet som vi definerte tidligere.
En annen viktig metode som vi brukte, er delt. Denne metoden brukes til å dele den gitte strengen basert på noen gjentatte mønstre. Her har vi gitt en streng “Hello_World_Today”.
La oss si at vi vil fjerne understrekingen fra den gitte strengen og få understrengene. For dette spesifiserer vi inngangsparameteren, og deretter gir vi mønsteret som vi trenger å bruke som delingspunkt. Metoden returnerer en matrise, og vi kan bruke en enkel sløyfe som foreach for å hente alle strengene.
Regular Expression Syntax
Det er flere forskjellige syntakser, for eksempel spesialtegn, kvantifiserende, karakterklasser, etc. som kan brukes til å matche et bestemt mønster fra en gitt inngang.
I denne delen av opplæringen vil vi dykke dypt ned i syntaksen som tilbys av regex, og vil prøve å løse noen virkelige scenarier ved å bruke dem. Før du fortsetter, må du sørge for at du har fått den grunnleggende ideen om regex og de forskjellige metodene som er tilgjengelige i regex-klassen.
Spesielle karakterer
Spesialtegn i en regex brukes til å tilordne flere forskjellige betydninger til et mønster. Vi vil nå se på noen av de brukte spesialtegnene og deres betydning i Regex.3
Spesielle karakterer | Betydning |
---|---|
w og W. | Små bokstaver 'w' brukes til å matche alfanumeriske / understrekingstegn, og store bokstaver 'W' brukes til å matche tegn som ikke er ord. |
^ | Dette er en av de mest brukte syntakene. Det betegner starten, ordet eller mønsteret etter at dette begynner å matche fra starten av inngangsteksten. |
$ | Dette tegnet brukes til å matche ord fra slutten av strengen. Ord / mønstre betegnet før dette symbolet vil samsvare med ordene som er til stede på slutten av strengen. |
. (punktum) | Dot brukes til å matche et enkelt tegn i den gitte strengen som forekommer en gang. |
n | Dette brukes til en ny linje. |
d og D | Små bokstaver 'd' brukes til å matche et siffertegn og store bokstaver 'D' brukes til å matche ikke-sifrede tegn. |
s og S | Små bokstaver 's' brukes til å matche hvite mellomrom og store bokstaver 'S' brukes til å matche ikke-hvite mellomrom. |
Kvantifiseringssyntaks
Kvantifiseringssyntaks brukes til å telle eller kvantifisere samsvarende kriterier. For eksempel, hvis du vil sjekke om en bestemt streng inneholder et alfabet en eller flere ganger. La oss ta en titt på noen av de ofte brukte kvantifiseringsmidlene i regulært uttrykk.
Kvantifiseringssyntaks | Betydning |
---|---|
* | Dette symbolet brukes til å matche forrige tegn. |
+ | Dette symbolet brukes til å matche ett eller flere tegn på rad. |
{n} | Det numeriske sifferet i de krøllete bukseselene brukes til å matche nummeret på det forrige tegnet definert av numerisk inne i krøllete bukseseler. |
{n,} | Tallet inne i krøllete bukseseler og dette symbolet brukes til å sørge for at det samsvarer med minst n (dvs. tallverdien inne i seler). |
{n, m} | Dette symbolet brukes til å matche fra forrige tegn fra n antall ganger til m antall ganger. |
? | Dette symbolet gjør at de foregående tegnene samsvarer som valgfrie. |
Karakterklasse
Karakterklassen er også kjent som tegnsett, og dette brukes til å fortelle regex-motoren å lete etter en enkelt kamp av flere tegn. En karakterklasse vil bare matche ett tegn, og rekkefølgen på tegnene som er lukket inne i tegnsettet, spiller ingen rolle.
Karakterklasse | Betydning |
---|---|
( område ) | Symbolet for firkantet parentes brukes til å matche for en rekke tegn. For eksempel kan vi bruke den til å definere et hvilket som helst tegn i området fra alfabetet 'a' til 'z' ved å omslutte området inne i braketten som (a-z) Eller vi kan også matche '1' til '9' ved å betegne (1-9) |
(^ rekkevidde) | Dette betegner negatert karakterklasse. Den brukes til å matche noe, ikke i området angitt inne i braketten. |
Dette brukes til å matche spesialtegn som kan ha sine egne regex-symboler. Skråstreken brukes til å matche spesialtegnene i deres bokstavelige form. |
Gruppering
Runde parenteser eller parenteser kan brukes til å gruppere en del av det regulære uttrykket sammen. Dette tillater brukeren å enten legge til en kvantifier med uttrykket.
Gruppering | Betydning |
---|---|
(gruppeuttrykk) | De runde parentesene brukes til å gruppere et uttrykk. |
| | The. operatøren brukes inne i den runde braketten for å bruke et alternativ for eksempel (a | b). |
C # Eksempler på vanlig uttrykk
I forrige avsnitt lærte vi om regulære uttrykkssymboler, i denne delen vil vi se detaljert på bruken av forskjellige symboler i Regulært uttrykk og kombinasjonen der de kan brukes til å matche forskjellige uttrykk.
I denne opplæringen vil vi diskutere noen av de mest opplevde virkelige scenariene du kan møte som utvikler mens du arbeider med en applikasjon eller i et enkelt program for å få brukerinngang.
Eksempel på vanlig uttrykk med virkelige scenarier
La oss lære mer om vanlige uttrykk ved hjelp av eksempler i sanntid.
Scenario 1: Valider hvis inngangsstrengen er sammensatt av 6-sifrede store og små bokstaver.
Et vanligste scenario for vanlig uttrykk er å finne og matche et gitt ord. For eksempel, la oss si at jeg vil ha en tilfeldig alfabetisk streng fra brukeren, og at inngangen skal være nøyaktig 6-sifret.
For å validere at vi kan bruke et enkelt regulært uttrykk. La oss skrive et program for å forstå reguleringsuttrykk og bruk på en bedre måte.
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')); }
Produksjon
ekte
Falsk
Forklaring
I dette eksemplet prøver vi å validere en inngangsstreng for å sjekke om den inneholder sekssifrede alfabetiske tegn. Tegnene kan være både med små og store bokstaver, så vi må ta hensyn til det også.
Så her definerte vi et regulært uttrykksmønster i variabelen “patternText” og sendte det deretter inn i regex-objektet. Nå er de neste kodelinjene ganske enkle, vi brukte IsMatch-metoden for å sammenligne det vanlige uttrykket og inngangsstrengen.
La oss nå se på det vanlige uttrykket vi har utviklet. Uttrykket (^ (a-zA-Z) {6} $) består av 4 forskjellige deler. “^”, “(A-zA-Z)”, “{6}” og “$”. Den andre delen angir de samsvarende tegnene, som brukes til å utføre uttrykkstilpasning, 'a-z' for små bokstaver og 'A-Z' for store bokstaver.
Første deltegnet “^” sørger for at strengen starter med et mønster som er definert i den andre delen, dvs. små og store bokstaver.
De krøllete bukkene i den tredje delen bestemmer antall tegn i strengen som kan identifiseres av det definerte mønsteret, dvs. 6 i dette tilfellet, og “$” -symbolet sørger for at det ender med mønsteret som er definert i den andre delen.
^ (a-zA-Z) {6} $
Scenario 2: Bruk vanlig uttrykk for å validere at et ord som begynner med 'Super' og har hvitt mellomrom etter det, dvs. å validere hvis 'Super' er tilstede i begynnelsen av en setning.
La oss anta at vi leser noen brukerinnganger og må sørge for at brukeren alltid starter setningen med et bestemt ord, tall eller alfabet. Dette kan oppnås ganske enkelt ved å bruke et enkelt regulært uttrykk.
La oss se på et eksempelprogram og deretter diskutere i detalj om hvordan du skriver dette uttrykket.
public static void Main(string() args) { string patternText = @'^Supers'; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch('Super man')); //When pattern doesnt match Console.WriteLine(reg.IsMatch('Superhero')); }
Produksjon
ekte
Falsk
Forklaring
I dette eksemplet brukte vi også et lignende kodeoppsett som vi gjorde i det første. Reguleringsuttrykksmønsteret i dette scenariet krever samsvar med en kombinasjon av ord eller setninger som begynner med 'Super'.
^ Super
Så når vi ønsker å matche fra starten av ordserien, begynner vi med å sette “^” -symbolet, og gir mønsteret vi vil matche, i dette tilfellet “Super”. Nå kan mønsteret vi opprettet '^ Super' matche alle verdiene til super, til og med supermann eller overnaturlig, men vi vil ikke bare ha ordet 'Super'.
Dette betyr at det skal være hvite mellomrom etter ordet for å markere slutten av ordet og starten på et annet ord. For å gjøre det vil vi legge til symbolet ' s' i mønsteret og dermed gjøre vårt endelige mønster som
^ Super s
Scenario 3: Bruk vanlig uttrykk for å finne gyldige filnavn med en filtypetype.
Et annet viktig sanntidsscenario som utviklere ofte møter er validering av filtyper. La oss si at vi har en opplastingsknapp i brukergrensesnittet, som bare kan godta filtypetillegg.
Vi må validere brukeropplastingsfilen og informere ham i tilfelle han lastet opp feil filformat. Dette kan enkelt oppnås ved å bruke Regular expression.
Nedenfor er et enkelt program for å sjekke dette.
public static void Main(string() args) jpeg
Produksjon
ekte
ekte
ekte
Falsk
Falsk
Forklaring
Her må vi matche et filnavn. Et gyldig filnavn består av tre deler ( navn på fil +. + filendelse ). Vi må lage et vanlig uttrykk for å matche alle tre delene. La oss starte med å matche den første delen, dvs. navnet på filen. Et filnavn kan inneholde alfanumeriske og spesialtegn.
Som diskutert tidligere er symbolet for å betegne “ w”. Dessuten kan filnavnet bestå av ett eller flere tegn, så det vil bruke symbolet '+'. Kombiner dem og vi får symbolet for første del.
(w+)
Brakett adskilt dette i deler. Den neste delen er prikkesymbolet. Ettersom prikkesymbolet har sin betydning i en regeks, vil vi bruke et tilbakeslag før det for å gi det en bokstavelig betydning. Kombiner begge deler, så har vi dekket de to første delene av regexen.
(w+).
Nå, for den tredje og siste delen, kan vi direkte definere de nødvendige filtypene atskilt med '|' ELLER symbol. Dette kan deretter skilles ved å lukkes inne i en sirkulær brakett. Et “$” -tegn på slutten sørger for at de definerte utvidelsene er på slutten av strengen. La oss nå kombinere dem for å få det endelige regulære uttrykket.
(w+).(jpg|png|jpeg|gif)$
Nå, hvis vi bruker dette i programmet, kan vi se at det samsvarer med riktig format og returnerer true, men med ugyldige formater, returnerer det false.
Scenario 4: Bruk vanlig uttrykk for å validere et nettadresseadresseformat
La oss anta at vi har et webskjema som godtar en nettadresse eller domeneadresse. Vi ønsker at brukeren skal oppgi riktig nett- / domeneadresse mens han fyller ut skjemaet. For å avgjøre om brukeren har angitt en riktig nettadresse, kan et vanlig uttrykk være ganske nyttig.
public static void Main(string() args) { string patternText = @'^www.(a-zA-Z0-9){3,20}.(com|in|org|co.in|net|dev)$'; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch('www.selenium.dev')); //When pattern doesnt match Console.WriteLine(reg.IsMatch('ww.alsjk9874561230.movie.dont')); }
Produksjon
ekte
Falsk
Forklaring
Her vil vi matche et gyldig domenenavn ved å bruke et vanlig uttrykk. Et gyldig domenenavn starter med forkortelsen 'www' etterfulgt av en prikk (.), Deretter navnet på nettstedet etter det en prikk (.) Og til slutt en domenetillegg.
Så, i likhet med det forrige scenariet, vil vi prøve å matche det del for del. La oss først starte med å matche 'www.' Del. Så vi begynner med startsymbolet, deretter som 'www.' Det er noe som er løst, så vi bruker startsymbolet etterfulgt av de nøyaktige ordene for å matche.
“^www.”
Så begynner vi å jobbe med den andre delen. Den andre delen av nettadressen kan være et hvilket som helst alfanumerisk navn. Så her bruker vi firkantede parenteser som er tilstede i tegnklassen for å definere området som må matches. Etter å ha lagt til den andre delen med den andre delen vil gi oss.
“^www.(a-zA-Z0-9){3,20}”
Her har vi også lagt til krøllete bukseseler for å definere minimum og maksimal tegnlengde for nettstedsnavnet. Vi har gitt minimum 3 og maksimalt 20. Du kan gi hvilken som helst minimum eller maksimal lengde du ønsker.
Nå, etter å ha dekket den første og andre delen av nettadressen, har vi bare den siste delen, dvs. domenetillegg. Det er ganske likt det vi gjorde i det siste scenariet, vi samsvarer direkte med domenetilleggene ved å bruke OR og vedlegge alle gyldige domenetillegg innenfor den sirkulære braketten.
Dermed hvis vi legger alle disse sammen, vil vi ha et komplett regulært uttrykk for å matche enhver gyldig webadresse.
www.(a-zA-Z0-9){3,20}.(com|in|org|co.in|net|dev)$
Scenario 5: Bruk vanlig uttrykk for å validere et e-post-ID-format
La oss anta at vi har et påloggingsskjema på nettsiden vår som ber brukerne om å oppgi e-postadressen sin. Av åpenbare grunner vil vi ikke at skjemaet vårt skal fortsette videre med ugyldige e-postadresser. For å validere om e-postadressen som er oppgitt av brukeren er riktig eller ikke, kan vi bruke et vanlig uttrykk.
Nedenfor er et enkelt program for å validere en e-postadresse.
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('software_test123@gmail.com')); Console.WriteLine(reg.IsMatch('Special.Char@yahoo.co.in')); //When pattern doesnt match Console.WriteLine(reg.IsMatch('ww.alsjk9874561230.mo@vie.dont')); }
Produksjon
ekte
ekte
Falsk
Forklaring
En gyldig e-postadresse inneholder alfabet, tall og noen spesialtegn som punktum (.), Bindestrek (-) og understrekninger (_) etterfulgt av “@” -symbolet som deretter blir fulgt av domenenavnet og domenetillegg.
Dermed kan vi dele e-postadressen i fire deler, dvs. e-postidentifikator, '@' -symbol, domenenavnet og den siste er domenetillegg.
La oss starte med å skrive et vanlig uttrykk for første del. Det kan være alfanumerisk med noen spesialtegn. Anta at vi har en uttrykksstørrelse fra 5 til 25 tegn. I likhet med hvordan vi skrev det tidligere (i e-postscenariet), kan vi komme med følgende uttrykk.
^(a-zA-Z0-9._-){5,25}
Nå går vi til andre del. Det er relativt enkelt, ettersom vi bare må matche ett symbol, dvs. '@'. Å legge det til det ovennevnte uttrykket gir oss.
hvordan du åpner en .air fil
^(a-zA-Z0-9._-){5,25}.@
Å flytte til den tredje delen, dvs. domenenavnet, vil alltid være en rekke små bokstaver. Hvis du vil, kan du også inkludere numeriske eller store bokstaver, men for dette scenariet vil vi bruke små bokstaver.
Hvis vi legger til uttrykket for små bokstaver med lengde fra 2 til 12 tegn, vil vi ha følgende uttrykk.
^(a-zA-Z0-9._-){5,25}.@.(a-z){2,12}
Nå har vi bare igjen uttrykket for domenetillegg, i likhet med det fjerde scenariet, vi vil håndtere noen spesifikke domenetillegg. Hvis du vil, kan du legge til flere av dem ved å legge dem inne i en sirkulær brakett og skille dem med '|' symbol.
Konsolidering av dette uttrykket med det forrige uttrykket vil gi oss den endelige uttrykksverdien for validering av e-post.
^(a-zA-Z0-9._-){5,25}.@.(a-z){2,12}.(com|org|co.in|net)
Konklusjon
I denne opplæringen lærte vi hva regulært uttrykk er sammen med syntaksen / symbolene som brukes til å betegne, konstruerer et vanlig uttrykk. Regular expression lar brukeren matche en streng med et gitt mønster.
Dette er ganske nyttig i situasjoner som krever rask validering av inngangen, for eksempel når en bruker skriver inn sin e-postadresse eller telefonnummer, kan regex brukes til å raskt validere formatet og informere brukeren om problemet hvis brukeren har angitt feil format.
Vi lærte også å takle forskjellige scenarier som kan brukes til en rekke forskjellige applikasjoner. Vi så på trinnvis prosess for å skrive uttrykk for samsvarende ord, alfabeter, nettadresser, e-post-ID og til og med filtyper og utvidelser.
Disse scenariene er ganske nyttige i sanntidsvalidering av brukerinnganger uten å skrive mange linjer med kode, og hjelper dermed med å spare tid og redusere kompleksiteten. Disse eksemplene har blitt brukt for å veilede brukeren til å lage sitt eget sett med regulære uttrykk og dermed hjelpe dem med å håndtere flere andre forskjellige scenarier.
Regex kan være enkelt som å bruke alfabetet eller tall for å matche med en gitt serie med tegn eller komplekse ved å bruke en kombinasjon av spesialtegn, kvantifiserer, tegnklasser, etc. for å validere komplekse formater eller for å lete etter et bestemt mønster i tegnserien.
I et nøtteskall er et vanlig uttrykk et ganske kraftig verktøy for en programmerer og hjelper til med å redusere mengden kode som kreves for å oppnå i en datatilpasning eller en valideringsoppgave.
=> Sjekk ALLE C # opplæringsprogrammer her.
Anbefalt lesing
- C # String Tutorial - Strengmetoder med kodeeksempler
- C # Tilfeldig nummer og C # Tilfeldig strenggenerator med kodeeksempler
- C ++ regex Opplæring: Regulære uttrykk i C ++ med eksempler
- MongoDB Regular Expression $ regex med eksempel
- Java Regex-opplæring med eksempler på regulært uttrykk
- Hvordan bruke Unix regulære uttrykk
- Bruk av postprosessor i JMeter (Regular Expression Extractor)
- Java String Tutorial | Java strengmetoder med eksempler