0Pricing
C++ Academy · Lekcja

Wyszukiwanie i zastępowanie

Przekształcaj tekst za pomocą regex

Wyszukiwanie i zastępowanie to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.

regex_replace

std::regex_replace zwraca nowy łańcuch, w którym każde dopasowanie wzorca zostało zastąpione łańcuchem zastępczym.

  • Oryginalny łańcuch pozostaje niezmieniony.
  • Domyślnie zastępowane są wszystkie dopasowania.
#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;
}

Zastępowanie cyfr

Wzorce ułatwiają masowe zmiany, takie jak zastąpienie każdej cyfry w łańcuchu symbolem zastępczym.

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

Odwołania wsteczne w zamianie

W łańcuchu zastępczym należy użyć $1, $2, ... , aby wstawić przechwycone grupy i zmieniać kolejność tekstu.

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

Całe dopasowanie: $&

Token $& oznacza całe dopasowanie i jest przydatny do otaczania znalezionego tekstu dodatkowymi znakami.

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

Zastępowanie tylko pierwszego dopasowania

Należy przekazać std::regex_constants::format_first_only, aby zastąpić tylko pierwsze dopasowanie zamiast wszystkich wystąpień.

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

Normalizowanie białych znaków

Typowe zadanie porządkowania tekstu polega na zastąpieniu ciągów białych znaków pojedynczą spacją.

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

Usuwanie dopasowań

Zastąpienie dopasowań pustym łańcuchem skutecznie je usuwa, co jest przydatne do usuwania niepożądanych znaków.

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

Zmiana formatu dat

Należy przechwycić fragmenty daty i zmienić ich kolejność w zamianie, aby zmienić format.

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

Zachowywanie niedopasowanego tekstu

Domyślnie niedopasowany tekst jest kopiowany dalej. Należy użyć format_no_copy, aby wyświetlić tylko zamiany i odrzucić resztę.

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

Cenzurowanie słów

Można połączyć alternatywę z zamianą, aby jednocześnie cenzurować listę słów.

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

Budowanie wyniku

Ponieważ regex_replace zwraca łańcuch, można łączyć przekształcenia, przekazując wynik jednego wywołania do kolejnego.

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

Szybkie sprawdzenie

Sprawdź swoje rozumienie składni zamiany.

Podsumowanie

Poznano sposoby przekształcania tekstu za pomocą regex_replace:

  • domyślnie zastępuje wszystkie dopasowania i zwraca nowy łańcuch
  • $1, $2, $& wstawiają przechwycone grupy i całe dopasowanie
  • flagi takie jak format_first_only i format_no_copy
  • można łączyć wywołania, aby tworzyć złożone operacje porządkowania tekstu

Następnie poznane zostaną wydajne sposoby używania wyrażeń regularnych i unikania typowych pułapek wydajnościowych.

Często zadawane pytania

Czy lekcja „Wyszukiwanie i zastępowanie” jest bezpłatna?

Tak — pełny tekst „Wyszukiwanie i zastępowanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wyszukiwanie i zastępowanie”?

Przekształcaj tekst za pomocą regex Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C++ Academy?

Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Wyszukiwanie i zastępowanie”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?

Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy regex
  2. Grupy przechwytujące
  3. Wyszukiwanie i zastępowanie
  4. Uwagi dotyczące wydajności
← Powrót do C++ Academy