c regex tutorial regular expressions c with examples
Tutorialul privind expresiile regulate C ++ sau Regex explică funcționarea regexului în C ++, inclusiv funcționalitatea potrivirii regexului, căutării, înlocuirii, validării intrării și tokenizării:
Expresia regulată sau regexurile sau regexp, așa cum sunt denumite în mod obișnuit, sunt utilizate pentru a reprezenta un anumit model de șir sau text. Regexele sunt adesea folosite pentru a indica o sintaxă textuală standard a unui șir.
=> Vizitați aici pentru a vedea seria de formare C ++ pentru toți.
Fiecare personaj dintr-o expresie regulată are fie un caracter cu semnificație literală, fie un „metacaracter” care are o semnificație specială.
De exemplu , o expresie regulată „a (a-z)” poate avea valori „aa”, „ab”, „ax” etc. Aici a are un sens literal și (a-z) denotă orice caracter minuscul de la a la z.
Desigur, exemplul de mai sus este cel mai simplu. Putem avea o expresie regulată cu modele mai complexe pe măsură.
Aproape toate limbajele de programare oferă suport pentru regexe. C ++ are suport direct pentru regexe de la C ++ 11 în continuare. În afară de limbaje de programare, majoritatea programelor de procesare a textului, cum ar fi lexere, editori de text avansați, etc. folosesc regexe.
În acest tutorial, vom explora detaliile regexelor în general, precum și în ceea ce privește programarea C ++.
Ce veți învăța:
- Expresie regulată (regex) în C ++
- Șabloane de funcții utilizate în C ++ regex
- Validare intrare C ++
- Concluzie
Expresie regulată (regex) în C ++
O expresie regulată sau regex este o expresie care conține o secvență de caractere care definesc un anumit model de căutare care poate fi utilizat în algoritmi de căutare de șiruri, algoritmi de căutare sau găsire / înlocuire, etc. Regexele sunt, de asemenea, utilizate pentru validarea intrărilor.
Majoritatea limbajelor de programare oferă fie capacitate încorporată pentru regex, fie prin biblioteci. Începând cu C ++ 11, C ++ oferă suport regex prin intermediul bibliotecii standard prin antet.
Un procesor regex care este folosit pentru a analiza o regex îl transformă într-o reprezentare internă care este executată și potrivită cu un șir care reprezintă textul căutat. C ++ 11 folosește gramatica ECMAScript ca gramatică implicită pentru regex. ECMAScript este simplu, dar oferă capacități puternice de regex.
Să vedem câteva dintre tiparele pe care le specificăm în regex, cum ar fi Specificația intervalului, Tiparele repetate etc.
Specificații de gamă
Specificarea unei game de caractere sau litere este unul dintre cele mai simple criterii utilizate într-o regex.
De exemplu, putem specifica o gamă de litere mici de la a la z după cum urmează:
(a-z)
Aceasta se va potrivi exact cu un caracter minuscul.
Următoarele criterii,
(A-Za-z0-9)
Expresia de mai sus specifică intervalul care conține un singur caracter majuscul, un caracter cu litere mici și o cifră de la 0 la 9.
Parantezele (()) din expresiile de mai sus au o semnificație specială, adică sunt utilizate pentru a specifica intervalul. Dacă doriți să includeți o paranteză ca parte a unei expresii, atunci va trebui să o scăpați.
Deci următoarea expresie,
( (0-9)
Expresia de mai sus indică o paranteză de deschidere și o cifră în intervalul 0-9 ca regex.
Dar rețineți că, pe măsură ce programăm în C ++, trebuie să folosim secvența de evacuare specifică C ++ după cum urmează:
(\ (0-9)
Model repetat
Exemplele de gamă pe care le-am specificat mai sus se potrivesc cu un singur caracter sau literal. Dacă dorim să potrivim mai multe caractere, de obicei specificăm „modificatorul de expresie” împreună cu modelul, făcându-l astfel un model repetat.
Un modificator de expresie poate fi „+” care sugerează potrivirea apariției unui model de una sau mai multe ori sau poate fi „*” care sugerează potrivirea apariției unui model de zero sau de mai multe ori.
De exemplu,următoarea expresie,
(a-z) + se potrivește șirurilor precum a, aaa, abcd, softwaretestinghelp etc. Rețineți că nu se va potrivi niciodată cu un șir gol.
Expresia,
(a-z) * va potrivi un șir gol sau oricare dintre șirurile de mai sus.
Dacă doriți să specificați un grup de caractere care să se potrivească de una sau de mai multe ori, atunci puteți utiliza parantezele după cum urmează:
(Xyz) +
Expresia de mai sus se va potrivi cu Xyz, XyzXyz și XyzXyzXyz etc.
Exemplu regex C ++
Luați în considerare o expresie regulată care se potrivește cu un nume de fișier MS-DOS așa cum se arată mai jos.
char regex_filename() = “(a-zA-Z_) (a-zA-Z_0-9)*\.(a-zA-Z0-9)+”;
Regexul de mai sus poate fi interpretat după cum urmează:
Potriviți o literă (cu litere mici și apoi cu majuscule) sau cu o subliniere. Apoi, potriviți zero sau mai multe caractere, în care fiecare poate fi o literă, o subliniere sau o cifră. Apoi potriviți un punct literal (.). După punct, potriviți unul sau mai multe caractere, în care fiecare poate fi o literă sau o cifră care indică extensia de fișier.
Șabloane de funcții utilizate în C ++ regex
Să discutăm acum câteva dintre șabloanele funcționale importante în timp ce programăm regex în C ++.
regex_match ()
Acest șablon de funcție este utilizat pentru a se potrivi cu modelul dat. Această funcție returnează adevărat dacă expresia dată se potrivește cu șirul. În caz contrar, funcția returnează false.
Urmează un exemplu de programare C ++ care demonstrează funcția regex_match.
#include #include #include using namespace std; int main () { if (regex_match ('softwareTesting', regex('(soft)(.*)') )) cout Ieșire:
În programul de mai sus, mai întâi, potrivim șirul „softwareTesting” cu expresia regulată „(„ (soft) (. *) ”Folosind funcția regex_match. Ulterior, demonstrăm și diferite variații ale regex_match trimițându-i un obiect șir, raza etc.
regex_search ()
Funcția regex_search () este utilizată pentru a căuta un model în șir care se potrivește cu expresia regulată.
Luați în considerare următorul program C ++ care arată utilizarea 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:'< Ieșire:
Specificăm un șir și apoi o expresie regulată folosind obiectul regex. Acest șir și regex sunt transmise funcției regex_search împreună cu tipul de flag smatch. Funcția caută prima apariție a modelului în șirul de intrare și returnează șirul potrivit.
regex_replace ()
Funcția regex_replace () este utilizată pentru a înlocui modelul care se potrivește cu o expresie regulată cu un șir.
Să folosim un program C ++ pentru a demonstra funcția regex_replace ().
#include #include #include #include using namespace std; int main() { string mystr = 'This is software testing Help portal
'; cout<<'Input string: '< Ieșire:
Aici avem un șir de intrare. Oferim o expresie regulată pentru a se potrivi cu un șir care începe cu „p”. Apoi înlocuim cuvântul potrivit cu cuvântul „site web”. Apoi, înlocuim cuvântul „site-ul web” înapoi la portal.
Validare intrare C ++
Am discutat principalele șabloane de funcții care sunt utilizate pentru potrivirea modelelor folosind regex. Este remarcabil faptul că scopul principal pe care regex îl servește este validarea intrărilor. Puteți valida intrarea introdusă de la un dispozitiv de intrare standard utilizând expresia regex.
Verificați programul de mai jos pentru a demonstra cum puteți utiliza regexul pentru a valida datele primite.
#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'< Ieșire:
Acest program se potrivește cu datele introduse de utilizator pentru a valida dacă este un număr întreg. Ieșirea de mai sus arată că, atunci când este introdus un număr întreg, acesta dă un mesaj adecvat și când sunt introduse alte date, acesta dă mesajul ca intrare nevalidă.
ce este un fișier swf și cum îl deschid
Concluzie
Regex este utilizat în motoarele de căutare pentru a căuta modele, căuta și înlocui dialoguri de aplicații precum procesoare de text și editori de text. Regex este, de asemenea, utilizat în utilitățile UNIX, cum ar fi sed, awk, precum și în analiza lexicală a programului.
Am văzut funcțiile care sunt utilizate pentru potrivirea, căutarea și înlocuirea tiparelor în acest tutorial. Folosind aceste funcții, putem dezvolta practic o aplicație eficientă care implementează funcționalitatea dorită folosind regex.
Regex permite validarea eficientă a intrării sau căutării și înlocuirea unui șir prin corecția modelului și acest lucru se poate face folosind foarte puține linii de cod C ++.
Citește și => Tutorial de expresie regulată Java
=> Verificați TOATE tutorialele C ++ aici.
Lectură recomandată
- MongoDB Regular Expression $ regex cu Exemplu
- Tutorial Python DateTime cu exemple
- Cum se utilizează expresiile regulate Unix
- Tutorial Java Lungime matrice cu exemple de cod
- Tutorial Unix Shell Scripting cu exemple
- Tutorial MongoDB Sharding cu exemplu
- Tutorial Selenium Find Element By Text cu exemple
- Tutorial Unix Pipes: Pipe în programarea Unix