캡처 그룹
매칭된 부분 추출하기
캡처 그룹은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
캡처 그룹이란 무엇인가요?
패턴의 괄호는 캡처 그룹을 만들며, 괄호가 일치한 텍스트 부분을 기억하므로 나중에 추출할 수 있습니다.
(\\d+)는 연속된 숫자를 캡처합니다.- 결과는
std::smatch에 저장됩니다.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\d+)");
std::smatch m;
std::string s = "order 42";
if (std::regex_search(s, m, p)) {
std::cout << "Captured: " << m[1] << '\n';
}
return 0;
}일치 결과
std::smatch는 일치 결과를 저장합니다. [0]은 전체 일치이고, [1], [2], ...는 순서대로 캡처 그룹입니다.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\w+)@(\\w+)");
std::smatch m;
std::string s = "user@host";
if (std::regex_search(s, m, p)) {
std::cout << "Whole: " << m[0] << '\n';
std::cout << "User: " << m[1] << ", Host: " << m[2] << '\n';
}
return 0;
}여러 그룹
예를 들어 날짜를 연도, 월, 일로 나누는 것처럼 여러 부분을 한 번에 캡처할 수 있습니다.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\d{4})-(\\d{2})-(\\d{2})");
std::smatch m;
std::string s = "2026-05-30";
if (std::regex_match(s, m, p)) {
std::cout << "Y=" << m[1] << " M=" << m[2] << " D=" << m[3] << '\n';
}
return 0;
}str(), position(), 길이()
각 그룹은 텍스트를 위한 str(), 오프셋을 위한 position(), 입력에서 차지하는 크기를 위한 length()를 제공합니다.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\d+)");
std::smatch m;
std::string s = "abc 789 xyz";
if (std::regex_search(s, m, p)) {
std::cout << "str: " << m[1].str() << '\n';
std::cout << "pos: " << m.position(1) << '\n';
std::cout << "len: " << m.length(1) << '\n';
}
return 0;
}prefix와 suffix
일치 객체는 prefix()(일치 결과 앞의 텍스트)와 suffix()(그 뒤의 텍스트)도 제공합니다.
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d+");
std::smatch m;
std::string s = "left 55 right";
if (std::regex_search(s, m, p)) {
std::cout << "prefix: [" << m.prefix() << "]\n";
std::cout << "suffix: [" << m.suffix() << "]\n";
}
return 0;
}비캡처 그룹
캡처하지 않고 그룹화하려면 (?:...)를 사용하세요. 수량자나 대체 선택을 위해 그룹화만 필요할 때 번호가 매겨진 그룹을 의미 있게 유지할 수 있습니다.
#include <iostream>
#include <regex>
int main() {
std::regex p("(?:Mr|Ms) (\\w+)");
std::smatch m;
std::string s = "Ms Smith";
if (std::regex_search(s, m, p)) {
std::cout << "Name: " << m[1] << '\n';
}
return 0;
}그룹이 일치했는지 확인하기
선택적 그룹은 일치에 참여하지 않을 수 있습니다. 하위 일치 결과에서 matched를 확인하여 무엇인가 캡처했는지 알아보세요.
#include <iostream>
#include <regex>
int main() {
std::regex p("file(\\.txt)?");
std::smatch m;
std::string s = "file";
if (std::regex_match(s, m, p)) {
std::cout << std::boolalpha << "ext matched: " << m[1].matched << '\n';
}
return 0;
}모든 일치 결과 순회
std::sregex_iterator는 문자열의 모든 일치 결과를 순회하면서 각 그룹을 함께 제공합니다.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\d+)");
std::string s = "a1 b22 c333";
auto begin = std::sregex_iterator(s.begin(), s.end(), p);
auto end = std::sregex_iterator();
for (auto it = begin; it != end; ++it) {
std::cout << (*it)[1] << '\n';
}
return 0;
}일치 횟수 세기
반복자와 std::distance를 결합하여 패턴이 몇 번 나타나는지 셀 수 있습니다.
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d+");
std::string s = "1 22 333 4444";
auto begin = std::sregex_iterator(s.begin(), s.end(), p);
auto end = std::sregex_iterator();
std::cout << "Count: " << std::distance(begin, end) << '\n';
return 0;
}키-값 쌍 추출
일치 결과마다 두 그룹을 사용하면 key=value 토큰처럼 간단한 구조화된 텍스트를 분석할 수 있습니다.
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\w+)=(\\w+)");
std::string s = "a=1 b=2 c=3";
auto begin = std::sregex_iterator(s.begin(), s.end(), p);
auto end = std::sregex_iterator();
for (auto it = begin; it != end; ++it) {
std::cout << (*it)[1] << " -> " << (*it)[2] << '\n';
}
return 0;
}캡처 저장
str()을 사용하여 캡처한 하위 일치 결과를 std::string에 복사하면 일치 객체가 사라진 후에도 데이터가 유효하게 유지됩니다.
#include <iostream>
#include <regex>
#include <string>
int main() {
std::regex p("v(\\d+)");
std::smatch m;
std::string s = "version v7";
std::string version;
if (std::regex_search(s, m, p)) {
version = m[1].str();
}
std::cout << "Stored: " << version << '\n';
return 0;
}빠른 확인
캡처 그룹 번호 매기기에 대한 이해도를 확인해 보세요.
복습
캡처 그룹을 사용하여 데이터를 추출하는 방법을 배웠습니다.
- 괄호는 캡처하고,
(?:...)는 캡처하지 않고 그룹화합니다 smatch[0]은 전체 일치이고,[1]이상은 그룹입니다str(),position(),length(),prefix(),suffix()sregex_iterator는 모든 일치 결과를 순회합니다
다음으로 검색 및 바꾸기를 사용하여 텍스트를 변환하겠습니다.
자주 묻는 질문
“캡처 그룹” 강의는 무료인가요?
네 — “캡처 그룹” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“캡처 그룹”에서 뭘 배우나요?
매칭된 부분 추출하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“캡처 그룹” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.