c regex tutorial what is c regular expression
Denne C # Regex-tutorial forklarer, hvad der er et regulært udtryk i C #, dets syntaks, Regex-klassemetoder, og hvordan man bruger disse metoder ved hjælp af eksempler:
Det regulære udtryk i C # bruges til at matche et bestemt tegnmønster. Regulære udtryk bruges, når en bruger har brug for at finde et gentaget mønster eller foretage en datavalidering eller endda til at kontrollere dataformatering.
En RegEx bruges til at finde ud af, om en streng indeholder eller matcher et givet tegnmønster. En regex er primært en tegnsekvens, der angiver et mønster.
Et mønster kan være alt lige fra tal, karakter eller en kombination af alle. Regex bruges i vid udstrækning til validering. Parsing eller matchende strenge, for eksempel, finde ud af, om en streng matcher valutaformat, telefonnummer eller datoformat.
=> Læs igennem Easy C # Training Series.
ved fejl genoptages næste i qtp
Hvad du vil lære:
Regex klasse i C #
Regex-klasse bruges i C # til at udføre regex-operationer. Den indeholder flere forskellige metoder, der kan bruges til at udføre forskellige operationer relateret til regex.
Det kan bruges til at analysere stor tekst for at finde en bestemt tegnsekvens ved hjælp af metoder, der kan bruges til at udføre et match, til at erstatte eller kan bruges til at opdele tegnsekvensen.
Regex-klassen er til stede inde i navneområdet; System.Text.RegularExpression. Klassen accepterer en streng i form af en tegnsekvens som parameter.
C # Regex-metoder
IsMatch
Den enkleste og mest nyttige metode i Regex-klassen er IsMatch-metoden. Denne metode har forskellige overbelastninger til at udføre matchning af tegn baseret på forskellige parametre.
Den enkleste er IsMatch (strengtekst) , giver denne metode brugeren mulighed for at give en tegnsekvens til matchning af en streng.
Den anden overbelastning IsMatch (strengtekst, int-position). Denne metode returnerer en boolsk værdi og tager to (streng og heltal) parametre. Strengteksten, der er angivet i parameteren, er grundlæggende en regex-konstruktør, der matcher tegnsekvensen fra startpositionen, der er angivet af heltalsparameteren.
Således vil denne metode forsøge at matche strenginput på den position, der leveres af et heltalsparameter i en given streng.
Den tredje overbelastning, IsMatch (strengtekst, strengemønster) accepterer to parametre og returnerer en boolsk værdi. Den første parameter er tekst, hvor brugeren skal finde et mønster, og den næste parameter giver det mønster, som brugeren søger i den givne tekst.
Genlæst læsning = >> Mønster matching i MySQL
Erstat (strengtekst, strengerstatningstekst)
Udskiftningsmetoden accepterer to parametre og returnerer en strengværdi. Den første parameter er den tegnsekvens eller regex, som du vil bruge til match, og den anden er erstatningen for regex.
Metoden fungerer ved at finde et match af den givne tekst og erstatter derefter den med erstatningsteksten fra brugeren. Metodesignaturen er offentlig streng Udskift (strengtekst, strengudskiftningstekst)
Offentlig streng () Split (strengtekst)
Opdelingsmetoden fra regex-klassen accepterer strenginput som en parameter og returnerer et array, der indeholder understrenge. Parameteren, der sendes i metoden, er den streng, der skal deles.
Metoden finder det matchende inputmønster i strengen, og når den identificerer ethvert matchende mønster, opdeles den strengen på det sted i mindre understreng, hvor hvert matchende mønster er brudpunktet. Metoden returnerer derefter et array, der indeholder alle understrengene.
Anvendelse af Regex C # -metoder
Lad os se på brugen af disse metoder ved at skrive et simpelt 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); } }
Output fra ovenstående program
Sand
Sand
Sand
Udskift verden
Hej
Verden
I dag
Forklaringen på ovenstående kode:
I starten af programmet har vi oprettet et objekt, og for det mønster, som vi vil bruge til kodetilpasning i den efterfølgende strenginput, har vi brugt tekstformatering for at holde tingene enkle i starten, men hvis du har det godt, kan du begynde at bruge mønstre med regulære udtryk. (Vi vil diskutere mønster med regulært udtryk detaljeret, når vi går videre i denne vejledning)
Derefter bruger vi matchstreng til at indtaste den faktor, som vi har erklæret som det specificerede objekt med inputstrengen, og hvis den matcher, vender den tilbage for at returnere false.
Den næste metode, vi brugte, er IsMethod (strenginput, int-indeks). Denne metode accepterer to-parameter, og her leverer vi inputstreng og indekset, hvorfra kampen skal starte. For eksempel, her ønskede vi at starte matchningen fra starten af inputstrengen.
Derefter demonstrerede vi brugen af IsMatch (strenginput, strengmønster). Her leverede vi inputstrengen, så vi ønskede at finde ud af, at hvis mønsterteksten er til stede i input eller ej. Hvis det er til stede, vil det returnere sandt (som i vores tilfælde) ellers vil det returnere falsk.
En anden metode, som vi diskuterede, erstattes. Denne metode er ret nyttig i programmer, hvor du vil foretage ændringer i inputdataene eller ændre formatet på de eksisterende data.
Her giver vi to parametre, den første er inputstrengen og den anden er den streng, der kan bruges til at erstatte den forrige streng. Denne metode bruger også det mønster, der er defineret i det regex-objekt, som vi definerede tidligere.
En anden vigtig metode, som vi brugte, er split. Denne metode bruges til at opdele den givne streng baseret på nogle tilbagevendende mønstre. Her har vi leveret en streng “Hello_World_Today”.
Lad os sige, at vi vil fjerne understregningen fra den givne streng og hente understrengene. Til dette specificerer vi inputparameteren, og derefter giver vi det mønster, som vi har brug for som opdelingspunkt. Metoden returnerer et array, og vi kan bruge en simpel sløjfe som foreach til at hente alle strengene.
Regular Expression Syntax
Der er flere forskellige syntakser såsom specialtegn, kvantificeringsmidler, karakterklasser osv., Der kan bruges til at matche et bestemt mønster fra en given input.
I denne del af vejledningen dykker vi dybt ned i syntaksen, der tilbydes af regex, og vil prøve at løse nogle virkelige scenarier ved hjælp af dem. Før vi fortsætter, skal du sørge for, at du har fået den grundlæggende idé om regex og de forskellige metoder, der er tilgængelige i regex-klassen.
Særlige tegn
Specielle tegn i en regex bruges til at tildele flere forskellige betydninger til et mønster. Vi vil nu se på nogle af de meget anvendte specialtegn og deres betydning i Regex.3
Særlige tegn | Betyder |
---|---|
w og W | Små bogstaver 'w' bruges til at matche alfanumeriske / understregningstegn, og store bogstaver 'W' bruges til at matche tegn, der ikke er ord. |
^ | Dette er en af de mest anvendte syntakser. Det angiver starten, ordet eller mønsteret efter dette begynder at matche fra starten af inputteksten. |
$ | Dette tegn bruges til at matche ord fra slutningen af strengen. Ord / mønstre, der er angivet før dette symbol, matcher de ord, der findes i slutningen af strengen. |
. (prik) | Punkt bruges til at matche et enkelt tegn i den givne streng, der forekommer en gang. |
n | Dette bruges til en ny linje. |
d og D | Små bogstaver 'd' bruges til at matche et ciffertegn og store bogstaver 'D' bruges til at matche ikke-cifrede tegn. |
s og S | Små bogstaver 's' bruges til at matche hvide mellemrum og store bogstaver 'S' bruges til at matche ikke-hvide mellemrum. |
Kvantificeringssyntaks
Kvantificeringssyntaks bruges til at tælle eller kvantificere matchende kriterier. For eksempel, hvis du vil kontrollere, om en bestemt streng indeholder et alfabet en eller flere gange. Lad os se på nogle af de almindeligt anvendte kvantificeringsmidler i regulært udtryk.
Kvantificeringssyntaks | Betyder |
---|---|
* | Dette symbol bruges til at matche det foregående tegn. |
+ | Dette symbol bruges til at matche et eller flere tegn i træk. |
{n} | Det numeriske ciffer inde i de krøllede seler bruges til at matche nummeret på det foregående tegn defineret af numeriske inde i krøllede seler. |
{n,} | Tallet inde i krøllede seler og dette symbol bruges til at sikre, at det matcher mindst n (dvs. talværdi inden i seler). |
{n, m} | Dette symbol bruges til at matche fra foregående tegn fra n antal gange til m antal gange. |
? | Dette symbol får de foregående tegn til at matche som valgfri. |
Karakterklasse
Karakterklassen er også kendt som tegnsæt, og dette bruges til at fortælle regex-motoren at kigge efter et enkelt match ud af flere tegn. En karakterklasse matcher kun et tegn, og rækkefølgen af tegnene indeholdt i tegnsættet betyder ikke noget.
Karakterklasse | Betyder |
---|---|
( rækkevidde ) | Firkantet parentes symbol bruges til at matche for en række tegn. For eksempel kan vi bruge det til at definere et hvilket som helst tegn i området fra alfabetet 'a' til 'z' ved at omslutte området inden i parentes som (a-z) Eller vi kan også matche det numeriske '1' til '9' ved at betegne (1-9) |
(^ rækkevidde) | Dette betegner negativ karakterklasse. Det bruges til at matche noget, ikke i det område, der er angivet inden i beslaget. |
Dette bruges til at matche specialtegn, der kan have deres egne regex-symboler. Skråstreg bruges til at matche specialtegnene i deres bogstavelige form. |
Gruppering
Runde parenteser eller parenteser kan bruges til at gruppere en del af det regulære udtryk sammen. Dette giver brugeren mulighed for enten at tilføje et kvantificeringsmiddel med udtrykket.
Gruppering | Betyder |
---|---|
(gruppeudtryk) | De runde parenteser bruges til at gruppere et udtryk. |
| | Den | operatør bruges inde i det runde beslag til brug af et alternativ for eksempel (a | b). |
C # Eksempler på regulært udtryk
I det forrige afsnit lærte vi om regulære udtrykssymboler, i dette afsnit vil vi se detaljeret på brugen af forskellige symboler i regulært udtryk og den kombination, hvori de kan bruges til at matche forskellige udtryk.
I denne vejledning vil vi diskutere nogle af de mest stødte virkelige scenarier, som du måske står over for som udvikler, mens du arbejder på et program eller i et simpelt program for at få brugerinput.
Eksempel på regulært udtryk med virkelige scenarier
Lad os lære mere om regulære udtryk ved hjælp af eksempler i realtid.
Scenarie 1: Bekræft, hvis inputstrengen er sammensat af 6-cifrede store og små bogstaver.
Et mest almindeligt scenario for regulært udtryk er at finde og matche et givet ord. For eksempel, Lad os sige, at jeg vil have en tilfældig alfabetisk streng fra brugeren, og at input skal være nøjagtigt 6 cifret langt.
For at validere at vi kan bruge et simpelt regulært udtryk. Lad os skrive et program for at forstå den almindelige udtryksskrivning og -brug på en bedre måde.
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')); }
Produktion
Sand
Falsk
Forklaring
I dette eksempel forsøger vi at validere en inputstreng for at kontrollere, om den indeholder sekscifrede alfabetiske tegn. Tegnene kan være både med små og store bogstaver, så vi skal også tage højde for det.
Så her definerede vi et regulært ekspressionsmønster i variablen 'patternText' og sendte det derefter ind i regex-objektet. Nu er de næste kodelinjer ret enkle, vi brugte IsMatch-metoden til at sammenligne det regulære udtryk og inputstrengen.
Lad os nu se på det regulære udtryk, vi har udtænkt. Udtrykket (^ (a-zA-Z) {6} $) består af 4 forskellige dele. “^”, “(A-zA-Z)”, “{6}” og “$”. Den anden del angiver de matchende tegn, der bruges til at udføre udtrykstilpasning, 'a-z' for små bogstaver og 'A-Z' for store bogstaver.
Første deltegn “^” sikrer, at strengen starter med et mønster defineret i den anden del, dvs. små og store bogstaver.
De krøllede seler i tredje del bestemmer antallet af tegn i strengen, der kan identificeres ved det definerede mønster, dvs. 6 i dette tilfælde, og symbolet “$” sørger for, at det ender med det mønster, der er defineret i anden del.
^ (a-zA-Z) {6} $
Scenarie 2: Brug regulært udtryk til at validere, at et ord, der starter med 'Super' og har hvidt mellemrum efter det, dvs. at validere, hvis 'Super' er til stede i starten af en sætning.
Lad os antage, at vi læser noget brugerinput og skal sørge for, at brugeren altid starter deres sætning med et bestemt ord, tal eller alfabet. Dette kan opnås ganske let ved hjælp af et simpelt regulært udtryk.
Lad os se på et prøveprogram og derefter diskutere detaljeret om, hvordan man skriver dette udtryk.
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')); }
Produktion
Sand
Falsk
Forklaring
I dette eksempel brugte vi også en lignende kodeopsætning, som vi gjorde i den første. Det regulære udtryksmønster i dette scenarie kræver matchning med en kombination af ord eller sætninger, der starter med 'Super'.
^ Super
Så når vi vil matche fra starten af ordserien, begynder vi med at sætte symbolet “^” og giver det mønster, som vi vil matche, i dette tilfælde “Super”. Nu kan det mønster, som vi skabte '^ Super', matche alle værdierne for super, endda supermand eller overnaturlige, men vi vil ikke bare have ordet 'Super'.
Dette betyder, at der skal være hvidt mellemrum efter ordet for at markere slutningen af ordet og starten af et andet ord. For at gøre det vil vi tilføje symbolet ' s' til mønsteret og derved gøre vores endelige mønster som
^ Super s
Scenarie 3: Brug regulært udtryk til at finde gyldige filnavne med en filtypeforlængelse.
Et andet vigtigt realtidsscenarie, som udviklere ofte står over for, er validering af filtyper. Lad os sige, at vi har en uploadknap i brugergrænsefladen, som kun kan acceptere filtypeforlængelser af billeder.
Vi er nødt til at validere brugeruploadfilen og informere ham, hvis han uploader det forkerte filformat. Dette kan let opnås ved hjælp af regulært udtryk.
Nedenfor er et simpelt program til at kontrollere dette.
public static void Main(string() args) jpeg
Produktion
Sand
Sand
Sand
Falsk
Falsk
Forklaring
Her skal vi matche et filnavn. Et gyldigt filnavn består af tre dele ( filens navn +. + filtypenavn ). Vi er nødt til at skabe et regelmæssigt udtryk, der passer til alle tre dele. Lad os starte med at matche den første del, dvs. navnet på filen. Et filnavn kan indeholde alfanumeriske og specialtegn.
Som diskuteret tidligere er symbolet til at betegne det ' w'. Også filnavnet kan bestå af et eller flere tegn, så det vil bruge symbolet '+'. Kombiner dem, og vi får symbolet for den første del.
(w+)
Beslag adskilt dette i dele. Den næste del er prikkesymbolet. Da priksymbolet har sin betydning i en regex, bruger vi et tilbageslag før det for at give det en bogstavelig betydning. Kombiner begge dele, og vi har de første to dele af regexen dækket.
(w+).
Nu, for den tredje og sidste del, kan vi direkte definere de krævede filtypenavne adskilt af '|' ELLER symbol. Dette kan derefter adskilles ved at omslutte det inde i et cirkulært beslag. Et '$' -tegn i slutningen sørger for, at de definerede udvidelser er i slutningen af strengen. Lad os nu kombinere dem for at få det endelige regulære udtryk.
store dataanalyseværktøjer open source
(w+).(jpg|png|jpeg|gif)$
Hvis vi nu bruger dette i programmet, kan vi se, at det matcher det korrekte format og returnerer sandt, men med ugyldige formater, returnerer det falsk.
Scenarie 4: Brug regulært udtryk til at validere et webstedsadresseformat
Lad os antage, at vi har en webformular, der accepterer en webadresse eller domæneadresse. Vi ønsker, at brugeren skal indtaste den rigtige web- / domæneadresse, mens formularen udfyldes. For at bestemme, om brugeren har indtastet en korrekt webadresse, kan et regulært udtryk være ret nyttigt.
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')); }
Produktion
Sand
Falsk
Forklaring
Her vil vi matche et gyldigt domænenavn ved hjælp af et regulært udtryk. Et gyldigt domænenavn starter med forkortelsen “www” efterfulgt af en prik (.), Derefter navnet på hjemmesiden efter det en prik (.) Og i slutningen en domæneudvidelse.
Så i lighed med det foregående scenario vil vi forsøge at matche det del for del. Lad os først starte med at matche 'www.' En del. Så vi starter med startsymbolet, derefter som 'www.' Det er noget, der er løst, så vi bruger startsymbolet efterfulgt af de nøjagtige ord til at matche.
“^www.”
Så begynder vi at arbejde på den anden del. Den anden del af webadressen kan være et alfanumerisk navn. Så her bruger vi firkantede parenteser til stede i tegnklassen til at definere det interval, der skal matches. Efter at have tilføjet den anden del med den anden del vil give os.
“^www.(a-zA-Z0-9){3,20}”
Her har vi også tilføjet krøllede seler for at definere den mindste og maksimale tegnlængde for webstedsnavnet. Vi har givet mindst 3 og maksimalt 20. Du kan angive en hvilken som helst minimum eller maksimal længde, du ønsker.
Efter at have dækket den første og anden del af webadressen har vi kun den sidste del tilbage, dvs. domæneudvidelse. Det ligner meget det, vi gjorde i det sidste scenario, vi matcher direkte med domæneudvidelserne ved at bruge OR og vedlægge alle gyldige domæneudvidelser inden i den cirkulære parentes.
Således hvis vi tilføjer alle disse sammen, har vi et komplet regulært udtryk, der matcher enhver gyldig webadresse.
www.(a-zA-Z0-9){3,20}.(com|in|org|co.in|net|dev)$
Scenarie 5: Brug regulært udtryk til at validere et e-mail-id-format
Lad os antage, at vi har en logonformular på vores webside, der beder brugerne om at indtaste deres e-mail-adresse. Af åbenlyse grunde vil vi ikke have vores formular videre med ugyldige e-mail-adresser. For at validere, om den e-mail-adresse, der er indtastet af brugeren, er korrekt eller ej, kan vi bruge et regulært udtryk.
Nedenfor er et simpelt program til validering af en e-mail-adresse.
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')); }
Produktion
Sand
Sand
Falsk
Forklaring
En gyldig e-mail-adresse indeholder alfabeter, tal og nogle specialtegn som punkt (.), Bindestreg (-) og understregning (_) efterfulgt af '@' -symbolet, der derefter efterfølges af domænenavnet og domæneudvidelsen.
Således kan vi opdele e-mail-adressen i fire dele, dvs. e-mail-id, '@' symbol, domænenavnet og det sidste er domæneudvidelsen.
Lad os starte med at skrive et regulært udtryk til den første del. Det kan være alfanumerisk med nogle specialtegn. Antag, at vi har en udtryksstørrelse, der spænder fra 5 til 25 tegn. På samme måde som vi skrev det tidligere (i e-mail-scenariet) kan vi komme med følgende udtryk.
^(a-zA-Z0-9._-){5,25}
Nu går vi til anden del. Det er forholdsvis let, da vi kun skal matche et symbol, dvs. '@'. At tilføje det til ovenstående udtryk giver os.
^(a-zA-Z0-9._-){5,25}.@
Flytning til tredje del, dvs. domænenavnet, vil altid være en række små bogstaver. Hvis du vil, kan du også inkludere numeriske eller store bogstaver, men for dette scenarie vil vi gå med små bogstaver.
Hvis vi tilføjer udtrykket for små bogstaver med en længde fra 2 til 12 tegn, har vi følgende udtryk.
^(a-zA-Z0-9._-){5,25}.@.(a-z){2,12}
Nu er vi bare tilbage med udtrykket for domæneudvidelse, svarende til det fjerde scenario, vi vil håndtere nogle specifikke domæneudvidelser. Hvis du vil, kan du tilføje flere af dem ved at omslutte dem i en cirkulær parentes og adskille dem med et '|' symbol.
Konsolidering af dette udtryk med det foregående udtryk giver os vores endelige udtryksværdi til validering af e-mail.
^(a-zA-Z0-9._-){5,25}.@.(a-z){2,12}.(com|org|co.in|net)
Konklusion
I denne vejledning lærte vi, hvad regulært udtryk er sammen med syntaksen / symbolerne, der bruges til at betegne, konstruerer et regulært udtryk. Regulært udtryk giver brugeren mulighed for at matche en streng med et givet mønster.
Dette er ret nyttigt i situationer, der kræver hurtig validering af inputet, som når en bruger indtaster sin e-mail-adresse eller telefonnummer, regex kan bruges til hurtigt at validere formatet og informere brugeren om problemet, hvis brugeren har indtastet det forkerte format.
Vi lærte også at tackle forskellige scenarier, der kan bruges til en række forskellige applikationer. Vi kiggede trin for trin på processen for at skrive udtryk til matchende ord, alfabeter, webadresser, e-mail-id'er og endda filtyper og udvidelser.
Disse scenarier er ret nyttige i validering i realtid af brugerindgange uden at skrive adskillige kodelinjer og hjælper dermed med at spare tid og reducere kompleksiteten. Disse eksempler er blevet brugt til at guide brugeren til at oprette deres eget sæt regulære udtryk og dermed hjælpe dem med at håndtere flere andre forskellige scenarier.
Regex kan være simpelt som at bruge alfabet eller tal til at matche med en given række tegn eller komplekse ved at bruge en kombination af specialtegn, kvantificeringsmidler, tegnklasser osv. Til at validere komplekse formater eller til at lede efter et specifikt mønster i tegnserien.
I en nøddeskal er et regulært udtryk et ret stærkt værktøj for en programmør og hjælper med at reducere den mængde kode, der kræves for at udføre i en datatilpasning eller en valideringsopgave.
=> Tjek ALLE C # -studier her.
Anbefalet læsning
- C # String Tutorial - Strengmetoder med kodeeksempler
- C # tilfældigt nummer og C # tilfældig strenggenerator med kodeeksempler
- C ++ regex Selvstudie: Regulære udtryk i C ++ med eksempler
- MongoDB Regular Expression $ regex med eksempel
- Java Regex-vejledning med eksempler på regulært udtryk
- Sådan bruges Unix regulære udtryk
- Brug af postprocessor i JMeter (Regular Expression Extractor)
- Java String Tutorial | Java strengmetoder med eksempler