C++ Academy · Lektion

Søgning og erstatning

Transformér tekst med regex

Lektion 3 af 413 trin

Søgning og erstatning er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

regex_replace

std::regex_replace returnerer en ny streng, hvor hver matchning af et mønster erstattes af en erstatningsstreng.

  • Den oprindelige streng forbliver uændret.
  • Som standard erstattes alle matchninger.
#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;
}

Erstatning af cifre

Mønstre gør masseændringer nemme, for eksempel at maskere hvert ciffer i en streng med en pladsholder.

#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;
}

Tilbagereferencer i erstatninger

Brug $1, $2, ... i erstatningsstrengen for at indsætte indfangede grupper, så du kan omarrangere tekst.

#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;
}

Hele matchningen: $&

Symbolet $& henviser til hele matchningen og er praktisk, når du vil omgive fundet tekst med ekstra tegn.

#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;
}

Erstat kun den første

Send std::regex_constants::format_first_only med for kun at erstatte den første matchning i stedet for alle forekomster.

#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;
}

Normalisering af blanktegn

En almindelig oprydningsopgave er at samle sekvenser af blanktegn til ét mellemrum.

#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;
}

Fjernelse af matchninger

Hvis du erstatter med en tom streng, slettes alle matchninger effektivt, hvilket er nyttigt til at fjerne uønskede tegn.

#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;
}

Omformatering af datoer

Indfang dele af en dato, og omarrangér dem i erstatningen for at ændre formatet.

#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;
}

Bevaring af tekst uden match

Som standard kopieres tekst uden matchning videre. Brug format_no_copy til kun at udskrive erstatningerne og fjerne resten.

#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;
}

Censurering af ord

Kombinér alternation med erstatning for at censurere en liste over ord på én gang.

#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;
}

Opbygning af et resultat

Fordi regex_replace returnerer en streng, kan du kæde omdannelser sammen ved at sende ét resultat videre til det næste kald.

#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;
}

Hurtigt tjek

Test din forståelse af syntaksen for erstatninger.

Opsummering

Du har lært at omdanne tekst med regex_replace:

  • erstatter som standard alle matchninger og returnerer en ny streng
  • $1, $2, $& indsætter captures og hele matchningen
  • flag som format_first_only og format_no_copy
  • kæd kald sammen for at opbygge kompleks oprydning

Dernæst lærer du at bruge regex effektivt og undgå almindelige ydelsesproblemer.

Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Søgning og erstatning” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Søgning og erstatning”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Søgning og erstatning”?

Transformér tekst med regex Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Søgning og erstatning”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Grundlæggende om regex
  2. Capture-grupper
  3. Søgning og erstatning
  4. Ydelsesnoter
← Tilbage til C++ Academy