검색과 대체
regex로 텍스트 변환하기
검색과 대체은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
regex_replace
std::regex_replace는 패턴의 모든 일치 결과를 대체 문자열로 바꾼 새 문자열을 반환합니다.
- 원본 문자열은 변경되지 않습니다.
- 기본적으로 모든 일치 결과가 바뀝니다.
#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;
}숫자 바꾸기
패턴을 사용하면 문자열의 모든 숫자를 자리 표시자로 가리는 것처럼 대량 편집을 쉽게 수행할 수 있습니다.
#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;
}대체 문자열의 역참조
대체 문자열에 $1, $2, ...를 사용하면 캡처 그룹을 삽입하여 텍스트 순서를 바꿀 수 있습니다.
#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;
}전체 일치: $&
$& 토큰은 전체 일치 결과를 나타내며, 찾은 텍스트를 추가 문자로 감쌀 때 편리합니다.
#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;
}첫 번째 결과만 바꾸기
std::regex_constants::format_first_only를 전달하면 모든 발생 항목 대신 첫 번째 일치 결과만 바꿀 수 있습니다.
#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;
}공백 정규화
일반적인 정리 작업은 연속된 공백을 하나의 공백으로 축약하는 것입니다.
#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;
}일치 결과 제거
빈 문자열로 바꾸면 모든 일치 결과가 사실상 삭제되므로 원하지 않는 문자를 제거하는 데 유용합니다.
#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;
}날짜 형식 다시 지정
날짜의 각 부분을 캡처한 다음 대체 문자열에서 순서를 바꾸면 형식을 변경할 수 있습니다.
#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;
}일치하지 않는 텍스트 유지
기본적으로 일치하지 않는 텍스트는 그대로 복사됩니다. format_no_copy를 사용하면 대체 결과만 출력하고 나머지는 버릴 수 있습니다.
#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;
}단어 검열
대체 선택과 바꾸기를 결합하면 단어 목록을 한 번에 검열할 수 있습니다.
#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;
}결과 구성하기
regex_replace는 문자열을 반환하므로 한 결과를 다음 호출에 전달하여 변환을 연쇄할 수 있습니다.
#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;
}빠른 확인
대체 구문에 대한 이해도를 확인해 보세요.
복습
regex_replace를 사용하여 텍스트를 변환하는 방법을 배웠습니다.
- 기본적으로 모든 일치 결과를 바꾸고 새 문자열을 반환합니다
$1,$2,$&는 캡처 그룹과 전체 일치 결과를 삽입합니다format_first_only및format_no_copy같은 플래그- 호출을 연결하여 복잡한 정리 작업을 구성합니다
다음으로 정규 표현식을 효율적으로 사용하고 일반적인 성능 문제를 피하는 방법을 배우겠습니다.
자주 묻는 질문
“검색과 대체” 강의는 무료인가요?
네 — “검색과 대체” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“검색과 대체”에서 뭘 배우나요?
regex로 텍스트 변환하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“검색과 대체” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.