Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL의 match_results::length() 함수 완벽 가이드

이 글에서는 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가 출력됩니다.