C++ Academy · Lezione

Ricerca e sostituzione

Trasformare il testo con regex

Lezione 3 di 413 passaggi

Ricerca e sostituzione è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 3 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.

regex_replace

std::regex_replace restituisce una nuova stringa in cui ogni corrispondenza di un pattern viene sostituita da una stringa sostitutiva.

  • La stringa originale rimane invariata.
  • Per impostazione predefinita, vengono sostituite tutte le corrispondenze.
#include <iostream>
#include <regex>

int main() {
    std::regex p("cat");
    std::string s = "the cat and the cat";
    std::cout << std::regex_replace(s, p, "dog") << '\n';
    return 0;
}

Sostituire le cifre

I pattern semplificano le modifiche in blocco, ad esempio sostituire ogni cifra di una stringa con un segnaposto.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d");
    std::string s = "PIN 1234";
    std::cout << std::regex_replace(s, p, "*") << '\n';
    return 0;
}

Backreference nella sostituzione

Utilizzate $1, $2, ... nella stringa sostitutiva per inserire i gruppi catturati e riorganizzare il testo.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\w+) (\\w+)");
    std::string s = "John Smith";
    std::cout << std::regex_replace(s, p, "$2 $1") << '\n';
    return 0;
}

L'intera corrispondenza: $&

Il token $& fa riferimento all'intera corrispondenza ed è utile per racchiudere il testo trovato tra caratteri aggiuntivi.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d+");
    std::string s = "item 42";
    std::cout << std::regex_replace(s, p, "[$&]") << '\n';
    return 0;
}

Sostituire solo la prima

Passate std::regex_constants::format_first_only per sostituire solo la prima corrispondenza invece di ogni occorrenza.

#include <iostream>
#include <regex>

int main() {
    std::regex p("o");
    std::string s = "foo boo";
    auto out = std::regex_replace(s, p, "0", std::regex_constants::format_first_only);
    std::cout << out << '\n';
    return 0;
}

Normalizzare gli spazi bianchi

Un'attività di pulizia comune consiste nel ridurre sequenze di spazi bianchi a un singolo spazio.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\s+");
    std::string s = "too    many     spaces";
    std::cout << std::regex_replace(s, p, " ") << '\n';
    return 0;
}

Rimuovere le corrispondenze

Sostituire con una stringa vuota elimina di fatto ogni corrispondenza ed è utile per rimuovere i caratteri indesiderati.

#include <iostream>
#include <regex>

int main() {
    std::regex p("[^a-zA-Z]");
    std::string s = "a1b2c3";
    std::cout << std::regex_replace(s, p, "") << '\n';
    return 0;
}

Riformattare le date

Catturate le parti di una data e riordinatele nella sostituzione per modificarne il formato.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\d{4})-(\\d{2})-(\\d{2})");
    std::string s = "2026-05-30";
    std::cout << std::regex_replace(s, p, "$3/$2/$1") << '\n';
    return 0;
}

Conservare il testo senza corrispondenza

Per impostazione predefinita, il testo senza corrispondenza viene copiato così com'è. Utilizzate format_no_copy per produrre solo le sostituzioni ed eliminare il resto.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d+");
    std::string s = "a1b2c3";
    auto out = std::regex_replace(s, p, "$&", std::regex_constants::format_no_copy);
    std::cout << out << '\n';
    return 0;
}

Censurare le parole

Combinate l'alternanza con la sostituzione per censurare contemporaneamente un elenco di parole.

#include <iostream>
#include <regex>

int main() {
    std::regex p("bad|evil");
    std::string s = "a bad and evil idea";
    std::cout << std::regex_replace(s, p, "***") << '\n';
    return 0;
}

Costruire un risultato

Poiché regex_replace restituisce una stringa, potete concatenare le trasformazioni passando il risultato di una chiamata a quella successiva.

#include <iostream>
#include <regex>

int main() {
    std::string s = "  Hello,   World  ";
    s = std::regex_replace(s, std::regex("\\s+"), " ");
    s = std::regex_replace(s, std::regex("^ | $"), "");
    std::cout << "[" << s << "]\n";
    return 0;
}

Verifica rapida

Verificate la vostra comprensione della sintassi delle sostituzioni.

Riepilogo

Avete imparato a trasformare il testo con regex_replace:

  • sostituisce tutte le corrispondenze per impostazione predefinita e restituisce una nuova stringa
  • $1, $2, $& inseriscono le catture e l'intera corrispondenza
  • flag come format_first_only e format_no_copy
  • concatenare le chiamate per costruire operazioni di pulizia complesse

Ora imparerete a utilizzare le regex in modo efficiente ed evitare le insidie comuni delle prestazioni.

Gratis per iniziare

Impara C++ con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
51
Lezioni
203

Domande Frequenti

La lezione «Ricerca e sostituzione» è gratuita?

Sì — il testo completo di «Ricerca e sostituzione» è 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 «Ricerca e sostituzione»?

Trasformare il testo con regex 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 3 di 4.

Quanto tempo richiede la lezione «Ricerca e sostituzione»?

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