이 글에서는 C++ STL에서 match_results::length() 함수가 어떻게 동작하는지, 그 문법과 실제 사용 예제를 자세히 살펴보겠습니다.
C++ STL의 match_results란 무엇인가?
std::match_results는 정규식 매칭 작업에서 대상 문자열과 일치한 문자 시퀀스들의 집합을 보관하기 위해 사용되는 특수한 컨테이너 유사 클래스입니다. 이 컨테이너 안에서 정규식(regex) 매칭 연산이 수행되며, 대상 시퀀스에서 찾은 일치 결과들이 순서대로 저장됩니다.
match_results::length()란 무엇인가?
match_results::length()는 C++ STL의 내장 함수로, <regex> 헤더 파일에 정의되어 있습니다. 이 함수는 match_results 객체에 저장된 n번째 매치(match)의 길이를 확인할 때 사용됩니다. length()는 확인하려는 매치의 번호를 매개변수로 받으며, 이 번호는 반드시 match_results::size()보다 작은 값이어야 합니다.
문법(Syntax)
smatch_name.length(unsigned int num);
매개변수
이 함수는 매치 번호 하나를 매개변수로 받습니다. 매치 번호는 컨테이너의 크기보다 작은 값이어야 하며, 번호 0은 정규식과 일치한 전체 문자열(전체 매칭 표현식)을 의미합니다.
반환값
이 함수는 지정된 매치의 길이를 부호 없는 정수(unsigned integer) 값으로 반환합니다.
예제 1: 기본 사용법
입력: std::smatch;
smatch.length(0);
출력: 0
매칭이 수행되지 않은 빈 smatch 객체에서는 size()가 0이므로, length(0) 호출 시 0이 반환됩니다.
예제 2: 매치 결과 출력하기
#include <bits/stdc++.h>
using namespace std;
int main() {
string str = "TutorialsPoint";
regex R("(Tutorials)(.*)");
smatch Mat;
regex_match(str, Mat, R);
for (int i = 0; i < Mat.size(); i++) {
cout<<"Match is : " << Mat[i]<< endl;
}
return 0;
}
출력
위 코드를 실행하면 다음과 같은 결과가 출력됩니다 −
Match is : TutorialsPoint
Match is : Tutorials
Match is : Point
인덱스 0에는 정규식과 일치한 전체 문자열이 저장되고, 인덱스 1과 2에는 각각 첫 번째 캡처 그룹 (Tutorials)과 두 번째 캡처 그룹 (.*)의 매칭 결과가 저장됩니다.
예제 3: length()로 가장 긴 매치 찾기
#include <bits/stdc++.h>
using namespace std;
int main() {
string sr = "Tutorials Point";
regex Re("(Tutorials)(.*)");
smatch Mat;
regex_match(sr, Mat, Re);
int len = 0;
string str;
for (int i = 1; i < Mat.size(); i++) {
if (Mat.length(i) > len) {
str = Mat[i];
len = Mat.length(i);
}
}
cout<<"Match length is of: " << len;
return 0;
}
출력
위 코드를 실행하면 다음과 같은 결과가 출력됩니다 −
Match length is of: 9
이 예제에서는 각 캡처 그룹의 길이를 length(i)로 비교하여 가장 긴 매치의 길이를 구합니다. 첫 번째 그룹 "Tutorials"의 길이가 9로 두 번째 그룹 " Point"(길이 6)보다 길기 때문에 최종적으로 9가 출력됩니다.