c regex tutorial regular expressions c with examples
Il tutorial sulle espressioni regolari C ++ o Regex spiega il funzionamento delle espressioni regolari in C ++, inclusa la funzionalità di corrispondenza, ricerca, sostituzione, convalida dell'input e tokenizzazione di espressioni regolari:
L'espressione regolare o regex o regexp come vengono comunemente chiamate vengono utilizzate per rappresentare un particolare modello di stringa o testo. Le espressioni regolari sono spesso usate per denotare una sintassi testuale standard di una stringa.
=> Visita qui per vedere la serie di formazione C ++ per tutti.
Ogni carattere in un'espressione regolare ha un carattere con un significato letterale o un 'metacarattere' che ha un significato speciale.
Per esempio , un'espressione regolare 'a [a-z]' può avere valori 'aa', 'ab', 'ax' ecc. Qui a ha un significato letterale e [a-z] denota qualsiasi carattere minuscolo dalla a alla z.
Ovviamente, l'esempio sopra è il più semplice. Possiamo avere un'espressione regolare con modelli più complessi da abbinare.
Quasi tutti i linguaggi di programmazione forniscono supporto per le regex. C ++ ha il supporto diretto per le espressioni regolari da C ++ 11 in poi. Oltre ai linguaggi di programmazione, la maggior parte dei programmi di elaborazione del testo come i lexer, editor di testo avanzati, ecc. Usa le espressioni regolari.
In questo tutorial, esploreremo i dettagli delle regex in generale, nonché rispetto alla programmazione C ++.
Cosa imparerai:
- Espressione regolare (regex) In C ++
- Modelli di funzione utilizzati in C ++ regex
- Convalida dell'input C ++
- Conclusione
Espressione regolare (regex) In C ++
Un'espressione regolare o regex è un'espressione contenente una sequenza di caratteri che definiscono un particolare modello di ricerca che può essere utilizzato negli algoritmi di ricerca di stringhe, trova o trova / sostituisci algoritmi, ecc. Le espressioni regolari vengono utilizzate anche per la convalida dell'input.
La maggior parte dei linguaggi di programmazione fornisce funzionalità integrate per regex o tramite librerie. Da C ++ 11 in poi, C ++ fornisce il supporto alle espressioni regolari tramite la libreria standard tramite l'intestazione.
Un processore regex utilizzato per analizzare un'espressione regolare la traduce in una rappresentazione interna che viene eseguita e confrontata con una stringa che rappresenta il testo in cui si esegue la ricerca. C ++ 11 utilizza la grammatica ECMAScript come grammatica predefinita per le espressioni regolari. ECMAScript è semplice, ma fornisce potenti funzionalità regex.
Vediamo alcuni dei pattern che specifichiamo in regex come Range Specification, Repeated Patterns, ecc.
Specifiche della gamma
Specificare un intervallo di caratteri o letterali è uno dei criteri più semplici utilizzati in una regex.
Per esempio, possiamo specificare un intervallo di lettere minuscole dalla a alla z come segue:
[a-z]
Questo corrisponderà esattamente a un carattere minuscolo.
I seguenti criteri,
[A-Za-z0-9]
L'espressione sopra specifica l'intervallo contenente un singolo carattere maiuscolo, un carattere minuscolo e una cifra da 0 a 9.
Le parentesi ([]) nelle espressioni precedenti hanno un significato speciale, ovvero vengono utilizzate per specificare l'intervallo. Se vuoi includere una parentesi come parte di un'espressione, dovrai evitarla.
Quindi la seguente espressione,
[ [0-9]
L'espressione sopra indica una parentesi aperta e una cifra nell'intervallo da 0 a 9 come regex.
Ma nota che mentre programmiamo in C ++, dobbiamo usare la sequenza di escape specifica del C ++ come segue:
[\ [0-9]
Pattern ripetuto
Gli esempi di intervallo che abbiamo specificato sopra corrispondono a un solo carattere o letterale. Se vogliamo abbinare più di un carattere, di solito specifichiamo il 'modificatore di espressione' insieme al modello rendendolo così un modello ripetuto.
Un modificatore di espressione può essere '+' che suggerisce di abbinare l'occorrenza di un pattern una o più volte oppure può essere '*' che suggerisce di abbinare l'occorrenza di un pattern zero o più volte.
Per esempio,la seguente espressione,
[a-z] + corrisponde alle stringhe come a, aaa, abcd, softwaretestinghelp, ecc. Notare che non corrisponderà mai a una stringa vuota.
L'espressione,
[a-z] * corrisponderà a una stringa vuota o a una qualsiasi delle stringhe precedenti.
Se desideri specificare un gruppo di caratteri da abbinare una o più volte, puoi utilizzare le parentesi come segue:
(Xyz) +
L'espressione sopra corrisponderà a Xyz, XyzXyz e XyzXyzXyz, ecc.
Esempio di regex C ++
Considera un'espressione regolare che corrisponde a un nome di file MS-DOS come mostrato di seguito.
char regex_filename[] = “[a-zA-Z_] [a-zA-Z_0-9]*\.[a-zA-Z0-9]+”;
La regex sopra può essere interpretata come segue:
Trova una lettera (minuscola e poi maiuscola) o un trattino basso. Quindi trova zero o più caratteri, in cui ciascuno può essere una lettera, un trattino basso o una cifra. Quindi abbina un punto letterale (.). Dopo il punto, abbina uno o più caratteri, ciascuno dei quali può essere una lettera o una cifra che indica l'estensione del file.
Modelli di funzione utilizzati in C ++ regex
Discutiamo ora alcuni degli importanti modelli di funzioni durante la programmazione di espressioni regolari in C ++.
regex_match ()
Questo modello di funzione viene utilizzato per abbinare il modello dato. Questa funzione restituisce true se l'espressione data corrisponde alla stringa. In caso contrario, la funzione restituisce false.
Di seguito è riportato un esempio di programmazione C ++ che dimostra la funzione regex_match.
#include #include #include using namespace std; int main () { if (regex_match ('softwareTesting', regex('(soft)(.*)') )) cout Produzione:
Nel programma precedente, per prima cosa, confrontiamo la stringa 'softwareTesting' con l'espressione regolare '(' (soft) (. *) 'Utilizzando la funzione regex_match. Successivamente, dimostriamo anche diverse variazioni di regex_match passandogli un oggetto stringa, intervallo, ecc.
regex_search ()
La funzione regex_search () viene utilizzata per cercare un pattern nella stringa che corrisponde all'espressione regolare.
Considera il seguente programma C ++ che mostra l'utilizzo di 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:'< Produzione:
Specifichiamo una stringa e quindi un'espressione regolare utilizzando l'oggetto regex. Questa stringa e regex vengono passate alla funzione regex_search insieme al tipo di flag smatch. La funzione cerca la prima occorrenza di pattern nella stringa di input e restituisce la stringa corrispondente.
regex_replace ()
La funzione regex_replace () viene utilizzata per sostituire la corrispondenza del modello con un'espressione regolare con una stringa.
Usiamo un programma C ++ per dimostrare la funzione regex_replace ().
#include #include #include #include using namespace std; int main() { string mystr = 'This is software testing Help portal
'; cout<<'Input string: '< Produzione:
Qui abbiamo una stringa di input. Forniamo un'espressione regolare per trovare una corrispondenza con una stringa che inizia con 'p'. Quindi sostituiamo la parola corrispondente con la parola 'sito web'. Successivamente, sostituiamo la parola 'sito web' nel portale.
Convalida dell'input C ++
Abbiamo discusso i principali modelli di funzioni che vengono utilizzati per la corrispondenza dei modelli utilizzando regex. È interessante notare che lo scopo principale di regex è la convalida dell'input. È possibile convalidare l'input immesso da un dispositivo di input standard utilizzando l'espressione regex.
Controlla il programma seguente per dimostrare come puoi usare la regex per convalidare i dati in arrivo.
#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'< Produzione:
Questo programma abbina l'input inserito dall'utente per convalidare se è un numero intero. L'output di cui sopra mostra che quando viene inserito un numero intero, fornisce un messaggio appropriato e quando vengono inseriti altri dati, fornisce il messaggio come input non valido.
domande e risposte all'intervista con gli analisti del supporto tecnico
Conclusione
Regex viene utilizzato nei motori di ricerca per cercare schemi, cercare e sostituire finestre di dialogo di applicazioni come elaboratori di testi ed editor di testo. Regex è utilizzato anche nelle utilità UNIX come sed, awk e nell'analisi lessicale del programma.
Abbiamo visto le funzioni utilizzate per abbinare, cercare e sostituire i modelli in questo tutorial. Usando queste funzioni, possiamo sostanzialmente sviluppare un'applicazione efficiente che implementa la funzionalità desiderata usando regex.
Regex consente di convalidare in modo efficiente l'input o di cercare e sostituire una stringa applicando una patch al pattern e questo può essere fatto utilizzando pochissime righe di codice C ++.
Leggi anche => Tutorial Java Regular Expression
=> Controlla TUTTI i tutorial di C ++ qui.
Lettura consigliata
- MongoDB Regular Expression $ regex con Example
- Tutorial Python DateTime con esempi
- Come usare le espressioni regolari Unix
- Tutorial sulla lunghezza di array Java con esempi di codice
- Tutorial sullo scripting di shell Unix con esempi
- Tutorial sullo sharding di MongoDB con esempio
- Selenio Trova elemento per tutorial di testo con esempi
- Tutorial su Unix Pipes: Pipes nella programmazione Unix