0Pricing
C++ Academy · Lezione

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::regex contiene 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_match per l'intera stringa e regex_search per le corrispondenze di sottostringhe
  • classi di caratteri, quantificatori, ancoraggi e alternanza
  • classi predefinite come \\d ed 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

  1. Nozioni di base su regex
  2. Gruppi di cattura
  3. Ricerca e sostituzione
  4. Note sulle prestazioni
← Torna a C++ Academy