c regex tutorial regular expressions c with examples
Opplæringen om C ++ Regular Expressions eller Regex forklarer hvordan du arbeider med regex i C ++, inkludert funksjonaliteten til regex-samsvar, søk, erstat, validering av input og tokenisering:
Regular Expression eller regexes eller regexp som de ofte kalles brukes til å representere et bestemt mønster av streng eller tekst. Regexes brukes ofte til å betegne en standard tekstsyntaks for en streng.
=> Besøk her for å se C ++ treningsserie for alle.
Hver karakter i et vanlig uttrykk har enten et tegn med en bokstavelig betydning eller en 'metakarakter' som har spesiell betydning.
For eksempel , et vanlig uttrykk “a (a-z)” kan ha verdier ‘aa’, ‘ab’, ‘ax 'osv. Her har a en bokstavelig betydning og (a-z) betegner enhver liten bokstav fra a til z.
Selvfølgelig er eksemplet ovenfor det enkleste. Vi kan ha et vanlig uttrykk med mer komplekse mønstre å matche.
Nesten alle programmeringsspråkene gir støtte for regexer. C ++ har direkte støtte for regexer fra C ++ 11 og utover. Bortsett fra programmeringsspråk, bruker de fleste tekstbehandlingsprogrammer som lexers, avanserte tekstredigerere osv. Regexer.
I denne opplæringen vil vi utforske detaljene i regexer generelt så vel som med hensyn til C ++ programmering.
Hva du vil lære:
- Regular Expression (regex) I C ++
- Funksjonsmaler som brukes i C ++ regex
- C ++ Inngangsvalidering
- Konklusjon
Regular Expression (regex) I C ++
Et vanlig uttrykk eller regeks er et uttrykk som inneholder en sekvens av tegn som definerer et bestemt søkemønster som kan brukes i strengesøkealgoritmer, finne eller finne / erstatte algoritmer osv. Regekser brukes også til validering av innganger.
De fleste av programmeringsspråkene gir enten innebygd mulighet for regex eller gjennom biblioteker. Fra og med C ++ 11 gir C ++ regex-støtte ved hjelp av standardbiblioteket via overskriften.
En regex-prosessor som brukes til å analysere en regex, oversetter den til en intern representasjon som utføres og matches mot en streng som representerer teksten det blir søkt etter. C ++ 11 bruker ECMAScript-grammatikk som standardgrammatikk for regex. ECMAScript er enkelt, men det gir kraftige regex-muligheter.
La oss se noen av mønstrene vi spesifiserer i regex som Range Specification, Repeated Patterns, etc.
Rekkevidde Spesifikasjoner
Å spesifisere en rekke tegn eller bokstaver er et av de enkleste kriteriene som brukes i en regex.
For eksempel, vi kan spesifisere en rekke små bokstaver fra a til z som følger:
(a-z)
Dette vil matche nøyaktig ett små tegn.
Følgende kriterier,
(A-Za-z0-9)
Ovennevnte uttrykk spesifiserer området som inneholder ett enkelt stort tegn, ett små bokstaver og et siffer fra 0 til 9.
Parentesene (()) i uttrykkene ovenfor har en spesiell betydning, dvs. de brukes til å spesifisere området. Hvis du vil inkludere en brakett som en del av et uttrykk, må du unnslippe den.
Så følgende uttrykk,
( (0-9)
Ovennevnte uttrykk indikerer en åpningsbrakett og et siffer i området 0 til 9 som en regex.
Men merk at når vi programmerer i C ++, må vi bruke den C ++ spesifikke rømningssekvensen som følger:
(\ (0-9)
Gjentatt mønster
Områdeeksemplene vi har spesifisert ovenfor, samsvarer bare med ett tegn eller bokstavelig. Hvis vi vil matche mer enn ett tegn, spesifiserer vi vanligvis 'uttrykk modifikator' sammen med mønsteret og gjør det til et gjentatt mønster.
Et uttrykk modifiserende kan være '+' som antyder å matche forekomsten av et mønster en eller flere ganger, eller det kan være '*' som antyder å matche forekomsten av et mønster null eller flere ganger.
For eksempel,følgende uttrykk,
(a-z) + samsvarer med strengene som a, aaa, abcd, softwaretestinghelp osv. Merk at den aldri vil matche en tom streng.
Uttrykket,
(a-z) * vil matche en tom streng eller noen av strengene ovenfor.
Hvis du vil spesifisere en gruppe tegn som skal matche en eller flere ganger, kan du bruke parentesene som følger:
(Xyz) +
Ovennevnte uttrykk vil matche Xyz, XyzXyz og XyzXyzXyz, etc.
C ++ regex Eksempel
Vurder et vanlig uttrykk som samsvarer med et MS-DOS-filnavn som vist nedenfor.
char regex_filename() = “(a-zA-Z_) (a-zA-Z_0-9)*\.(a-zA-Z0-9)+”;
Ovennevnte regex kan tolkes som følger:
Match en bokstav (små og store bokstaver) eller en understreking. Match deretter null eller flere tegn, der hver kan være en bokstav, eller et understrek eller et siffer. Match deretter en bokstavelig prikk (.). Etter prikken samsvarer du med ett eller flere tegn, der hver kan være en bokstav eller et tall som indikerer filtypen.
Funksjonsmaler som brukes i C ++ regex
La oss nå diskutere noen av de viktige funksjonsmalene mens vi programmerer regex i C ++.
regex_match ()
Denne funksjonsmalen brukes til å matche det gitte mønsteret. Denne funksjonen returnerer sant hvis det gitte uttrykket samsvarer med strengen. Ellers returnerer funksjonen falsk.
Følgende er et C ++ programmeringseksempel som demonstrerer funksjonen regex_match.
#include #include #include using namespace std; int main () { if (regex_match ('softwareTesting', regex('(soft)(.*)') )) cout Produksjon:
I det ovennevnte programmet, matcher vi først strengen “softwareTesting” mot det vanlige uttrykket “(“ (soft) (. *) ”Ved hjelp av funksjonen regex_match. Deretter demonstrerer vi også forskjellige varianter av regex_match ved å sende den til et strengobjekt, rekkevidde osv.
regex_search ()
Funksjonen regex_search () brukes til å søke etter et mønster i strengen som samsvarer med det vanlige uttrykket.
Tenk på følgende C ++ - program som viser bruken av regex_search ().
#include #include #include using namespace std; int main() { //string to be searched string mystr = 'She sells_sea shells in the sea shore'; // regex expression for pattern to be searched regex regexp('s(a-z_)+'); // flag type for determining the matching behavior (in this case on string objects) smatch m; // regex_search that searches pattern regexp in the string mystr regex_search(mystr, m, regexp); cout<<'String that matches the pattern:'< Produksjon:
Vi spesifiserer en streng og deretter et vanlig uttrykk ved hjelp av regex-objektet. Denne strengen og regex sendes til funksjonen regex_search sammen med smatch-flaggetypen. Funksjonen søker etter den første forekomsten av mønster i inngangsstrengen og returnerer den matchede strengen.
regex_replace ()
Funksjonen regex_replace () brukes til å erstatte mønstermatchingen til et vanlig uttrykk med en streng.
La oss bruke et C ++ - program for å demonstrere regex_replace () -funksjonen.
#include #include #include #include using namespace std; int main() { string mystr = 'This is software testing Help portal
'; cout<<'Input string: '< Produksjon:
Her har vi en inngangsstreng. Vi gir et vanlig uttrykk for å matche en streng som begynner med ‘p’. Deretter erstatter vi det matchede ordet med ordet ‘nettsted’. Deretter erstatter vi ‘nettsted’ -ordet tilbake til portalen.
C ++ Inngangsvalidering
Vi har diskutert de viktigste funksjonsmalene som brukes til mønstermatching ved hjelp av regex. Det er bemerkelsesverdig at hovedformålet som regex tjener er validering av input. Du kan validere inngangen som er angitt fra en standard inndataenhet ved hjelp av regex-uttrykket.
Sjekk programmet nedenfor for å demonstrere hvordan du kan bruke regex til å validere innkommende data.
#include #include #include using namespace std; int main() { string input; regex integer_expr('(\+|-)?((:digit:))+'); //As long as the input is correct ask for another number while(true) { cout<>input; if(!cin) break; //Exit when the user inputs q if(input=='q') break; if(regex_match(input,integer_expr)) cout<<'Input is an integer'< Produksjon:
Dette programmet samsvarer med inngangen som er angitt av brukeren for å validere om det er et heltall. Ovennevnte utgang viser at når et helt tall er angitt, gir det en passende melding, og når andre data blir skrevet inn, gir det meldingen som ugyldig inndata.
gratis videokonverteringsprogramvare for pc
Konklusjon
Regex brukes i søkemotorer for å søke i mønstre, søke og erstatte dialoger av applikasjoner som tekstbehandlere og tekstredigerere. Regex brukes også i UNIX-verktøy som sed, awk samt leksikalsk analyse av programmet.
Vi har sett funksjonene som brukes til å matche, søke og erstatte mønstre i denne opplæringen. Ved å bruke disse funksjonene kan vi i utgangspunktet utvikle et effektivt program som implementerer ønsket funksjonalitet ved hjelp av regex.
Regex tillater effektiv validering av inndata eller søk og erstatning av en streng ved å lappe mønster, og dette kan gjøres ved hjelp av noen få linjer med C ++ - kode.
Les også => Java Regular Expression Tutorial
=> Sjekk ALLE C ++ opplæringsprogrammer her.
Anbefalt lesing
- MongoDB Regular Expression $ regex med eksempel
- Python DateTime Tutorial med eksempler
- Hvordan bruke Unix regulære uttrykk
- Java Array Length Tutorial With Code Eksempler
- Unix Shell Scripting Tutorial med eksempler
- MongoDB Sharding Tutorial med eksempel
- Selen Find Element By Text Tutorial med eksempler
- Unix Pipes Tutorial: Pipes in Unix Programming