이 글에서는 C++ STL에서 제공하는 match_results::size() 함수의 작동 방식, 문법, 그리고 실제 활용 예제를 자세히 살펴보겠습니다.
C++ STL에서 match_results란 무엇인가?
std::match_results는 정규식(regex) 매칭 연산의 결과로 찾아진 문자 시퀀스들의 집합을 저장하는 특수한 컨테이너형 클래스입니다. 이 컨테이너 안에서 정규식 매칭 연산이 대상 문자열에서 일치하는 부분들을 찾아 각 매치와 서브매치(sub-match)를 보관합니다.
match_results::size()란?
match_results::size()는 C++ STL에 내장된 함수로, <regex> 헤더 파일에 정의되어 있습니다. 이 함수는 해당 match_results 객체에 포함된 매칭 결과의 총 개수를 구할 때 사용됩니다.
반환 타입은 size_type이며, 객체에 저장된 전체 매치(match)와 서브매치(sub-match)의 개수를 나타냅니다. 참고로 인덱스 0에는 항상 전체 매치가 저장되고, 이후 인덱스부터 각 캡처 그룹(capture group)의 결과가 순서대로 저장되므로, 일반적으로 캡처 그룹 수 + 1이 반환됩니다.
문법
smatch_name.size();
매개변수
이 함수는 별도의 매개변수를 받지 않습니다.
반환값
match_results 객체에 포함된 매치와 서브매치의 총 개수를 size_type 형태로 반환합니다.
예제 1: 기본 사용법
입력: string str = "Tutorials Point";
regex R("(Tutorials)(.*)");
smatch Mat;
regex_match(str, Mat, R);
Mat.size();
출력: 3
예제 2: size()로 매칭 개수 확인하기
#include <bits/stdc++.h>
using namespace std;
int main() {
string str = "Tutorials Point";
regex R("(Tutorials)(.*)");
smatch Mat;
regex_match(str, Mat, R);
cout<<"Size is: " << Mat.size() << endl;
return 0;
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Size is: 3
정규식 (Tutorials)(.*)에는 두 개의 캡처 그룹이 있고, 여기에 전체 매치(인덱스 0)까지 포함되므로 총 3개의 매칭 결과가 반환됩니다.
예제 3: size()를 반복문과 함께 활용하기
#include <bits/stdc++.h>
using namespace std;
int main() {
string str = "Tutorials Point Tutorials";
regex R("(Tutorials)(.*)");
smatch Mat;
regex_match(str, Mat, R);
for (int i = 0; i < Mat.size(); i++) {
cout <<"length of "<<Mat.length(i)<< endl;
}
return 0;
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
length of 25 length of 9 length of 16
이 출력을 해석해 보면 다음과 같습니다.
- 인덱스 0: 전체 매치 "Tutorials Point Tutorials" → 길이 25
- 인덱스 1: 첫 번째 캡처 그룹 "Tutorials" → 길이 9
- 인덱스 2: 두 번째 캡처 그룹 " Point Tutorials" → 길이 16
이처럼 size()를 활용하면 매칭 결과의 개수를 손쉽게 파악하고, 반복문과 함께 각 매치의 정보를 효율적으로 처리할 수 있습니다.