Nozioni di base su regex
Confrontare pattern nel testo
Nozioni di base su regex è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
Che cos'è <regex>?
L'header <regex> consente di confrontare il testo con pattern di espressioni regolari che descrivono insiemi di stringhe. Create un pattern, quindi utilizzatelo per verificare o cercare del testo.
std::regexcontiene un pattern compilato.- Le funzioni di matching indicano se il testo corrisponde.
#include <iostream>
#include <regex>
int main() {
std::regex pattern("hello");
std::cout << std::boolalpha << std::regex_match("hello", pattern) << '\n';
return 0;
}regex_match e regex_search a confronto
regex_match richiede che corrisponda l'intera stringa. regex_search ha esito positivo se il pattern compare in qualsiasi punto della stringa.
#include <iostream>
#include <regex>
int main() {
std::regex p("cat");
std::string s = "the cat sat";
std::cout << std::boolalpha;
std::cout << "match: " << std::regex_match(s, p) << '\n';
std::cout << "search: " << std::regex_search(s, p) << '\n';
return 0;
}Classi di caratteri
Le parentesi quadre definiscono un insieme di caratteri consentiti. [aeiou] corrisponde a una qualsiasi vocale singola; gli intervalli come [a-z] corrispondono alle lettere minuscole.
#include <iostream>
#include <regex>
int main() {
std::regex p("[a-z]+");
std::cout << std::boolalpha << std::regex_match("hello", p) << '\n';
std::cout << std::regex_match("Hello", p) << '\n';
return 0;
}Quantificatori
I quantificatori controllano la ripetizione: * zero o più volte, + una o più volte, ? opzionale e {n,m} un intervallo di quantità.
#include <iostream>
#include <regex>
int main() {
std::regex p("a+b");
std::cout << std::boolalpha;
std::cout << std::regex_match("aaab", p) << '\n';
std::cout << std::regex_match("b", p) << '\n';
return 0;
}Classi predefinite
Le classi abbreviate riducono la quantità di testo da scrivere: \\d corrisponde a una cifra, \\w a un carattere di parola e \\s a uno spazio bianco. Nel codice sorgente C++ la barra rovesciata viene raddoppiata.
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d+");
std::cout << std::boolalpha;
std::cout << std::regex_match("12345", p) << '\n';
std::cout << std::regex_match("12a45", p) << '\n';
return 0;
}Ancoraggi
Gli ancoraggi vincolano una corrispondenza a una posizione: ^ indica l'inizio e $ la fine del testo. Corrispondono a posizioni, non a caratteri.
#include <iostream>
#include <regex>
int main() {
std::regex p("^abc$");
std::cout << std::boolalpha;
std::cout << std::regex_search("abc", p) << '\n';
std::cout << std::regex_search("xabc", p) << '\n';
return 0;
}Alternanza
La barra verticale | significa «oppure». Il pattern cat|dog corrisponde a una delle due parole. Utilizzate le parentesi per raggruppare e limitarne l'ambito.
#include <iostream>
#include <regex>
int main() {
std::regex p("cat|dog");
std::cout << std::boolalpha;
std::cout << std::regex_match("cat", p) << '\n';
std::cout << std::regex_match("dog", p) << '\n';
std::cout << std::regex_match("fish", p) << '\n';
return 0;
}Eseguire l'escape dei caratteri speciali
Caratteri come ., * e ( hanno un significato speciale. Eseguite il loro escape con una barra rovesciata per cercarli letteralmente.
#include <iostream>
#include <regex>
int main() {
std::regex p("3\\.14");
std::cout << std::boolalpha;
std::cout << std::regex_match("3.14", p) << '\n';
std::cout << std::regex_match("3x14", p) << '\n';
return 0;
}Matching senza distinzione tra maiuscole e minuscole
Passate un flag come std::regex::icase durante la costruzione del pattern per ignorare la distinzione tra maiuscole e minuscole durante il matching.
#include <iostream>
#include <regex>
int main() {
std::regex p("hello", std::regex::icase);
std::cout << std::boolalpha;
std::cout << std::regex_match("HELLO", p) << '\n';
std::cout << std::regex_match("Hello", p) << '\n';
return 0;
}Una convalida semplice
I pattern sono ottimi per convalidare i formati di input, ad esempio per verificare che una stringa abbia l'aspetto di un numero di base con un segno opzionale.
#include <iostream>
#include <regex>
bool isNumber(const std::string& s) {
static const std::regex p("-?\\d+");
return std::regex_match(s, p);
}
int main() {
std::cout << std::boolalpha;
std::cout << isNumber("-42") << '\n';
std::cout << isNumber("4a2") << '\n';
return 0;
}Eseguire più corrispondenze
Combinate classi e quantificatori per convalidare formati più complessi, ad esempio una sequenza di lettere seguita da cifre.
#include <iostream>
#include <regex>
int main() {
std::regex p("[A-Za-z]+\\d+");
std::cout << std::boolalpha;
std::cout << std::regex_match("abc123", p) << '\n';
std::cout << std::regex_match("123abc", p) << '\n';
return 0;
}Verifica rapida
Verificate la vostra comprensione della differenza tra matching e ricerca.
Riepilogo
Avete imparato le basi di <regex>:
regex_matchper l'intera stringa eregex_searchper le corrispondenze di sottostringhe- classi di caratteri, quantificatori, ancoraggi e alternanza
- classi predefinite come
\\ded escape dei caratteri speciali - flag come
icase
Ora estrarrete parti specifiche di una corrispondenza utilizzando i gruppi di cattura.
Domande Frequenti
La lezione «Nozioni di base su regex» è gratuita?
Sì — il testo completo di «Nozioni di base su regex» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «Nozioni di base su regex»?
Confrontare pattern nel testo Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Nozioni di base su regex»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Nozioni di base su regex
- Gruppi di cattura
- Ricerca e sostituzione
- Note sulle prestazioni