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_onlyiformat_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
- Podstawy regex
- Grupy przechwytujące
- Wyszukiwanie i zastępowanie
- Uwagi dotyczące wydajności