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

C++ STL match_results 연산자 [] 완벽 가이드: 문법과 사용 예제

이 글에서는 C++ STL에서 match_results 연산자 '[]'의 동작 방식, 문법 및 실제 사용 예제를 자세히 살펴보겠습니다.

C++ STL에서 match_results란 무엇인가?

std::match_results는 정규식(regex) 매칭 작업에서 일치된 문자열 시퀀스들의 집합을 저장하는 데 사용되는 특수한 컨테이너 유사 클래스입니다. 이 컨테이너 클래스 내에서 정규식 매칭 연산은 대상 시퀀스에서 일치하는 부분들을 찾아냅니다.

match_results 연산자 '[]'란?

match_results의 연산자 []는 참조 연산자로, match_results 객체의 i번째 위치에 직접 접근할 때 사용됩니다. 이 연산자는 객체와 연관된 i번째 매칭 위치를 반환하며, 0부터 시작하는 인덱스를 통해 요소에 직접 접근해야 할 때 매우 유용합니다.

문법

match_results1[int i];

매개변수

이 연산자는 접근하고자 하는 요소의 인덱스를 나타내는 정수형(integral type) 매개변수 1개를 받습니다.

반환 값

이 함수는 매칭 결과(match result)에서 i번째 위치에 대한 참조(reference)를 반환합니다.

예제 1: 기본 사용법

입력: string str = "TutorialsPoint";
   regex R("(Tutorials)(.*)");
   smatch Mat;
   regex_match(str, Mat, R);
   Mat[0];
출력: TutorialsPoint

코드 예제

#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

위 예제에서 볼 수 있듯이 Mat[0]은 전체 매칭 문자열을, Mat[1]은 첫 번째 캡처 그룹인 "Tutorials", Mat[2]는 두 번째 캡처 그룹인 "Point"를 반환합니다.

예제 2: 매칭 길이 비교하기

#include <bits/stdc++.h>
using namespace std;
int main() {
   string str = "Tutorials Point";
   regex R("(Tutorials)(Point)(.*)");
   smatch Mat;
   regex_match(str, Mat, R);
   int len = 0;
   string S;
   for(int i = 1; i < Mat.size(); i++) {
      if (Mat.length(i) > len) {
         str = Mat[i];
         len = Mat.length(i);
      }
   }
   cout<<"Matching length is : " << len<< endl;
   return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Matching length is : 0

이 예제에서는 각 캡처 그룹의 길이를 비교하여 가장 긴 매칭의 길이를 찾으려고 시도합니다. 하지만 입력 문자열 "Tutorials Point"에 공백이 포함되어 있어 정규식 패턴 (Tutorials)(Point)(.*)와 완전히 일치하지 않으므로, 결과적으로 매칭 길이가 0으로 출력됩니다. 이는 정규식 패턴 설계 시 입력 문자열의 형식을 정확히 고려해야 함을 보여주는 좋은 사례입니다.

정리

match_results의 연산자 []는 정규식 매칭 결과에 인덱스 기반으로 직관적으로 접근할 수 있게 해주는 핵심 도구입니다. 인덱스 0은 항상 전체 매칭 문자열을 가리키며, 1 이상의 인덱스는 각각의 캡처 그룹에 해당한다는 점을 기억하면 됩니다.