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

C++ STL match_results의 prefix()와 suffix() 함수 완벽 정리

이 글에서는 C++ STL에서 제공하는 match_results::prefix()match_results::suffix() 함수의 동작 원리, 문법, 그리고 실제 사용 예제를 자세히 살펴보겠습니다.

C++ STL의 match_results란?

std::match_results는 정규 표현식(regex) 매칭 연산의 결과로 매칭된 문자 시퀀스들을 저장하는 특수한 컨테이너 유사 클래스입니다. 이 컨테이너는 대상 문자열(target sequence)에 대해 정규 표현식 검색을 수행했을 때 찾아진 매칭 결과들을 보관하며, 매칭된 구간뿐만 아니라 그 앞뒤의 문자열 정보도 함께 관리할 수 있습니다.

match_results::prefix()란?

match_results::prefix()는 C++ STL의 내장 함수로, <regex> 헤더 파일에 정의되어 있습니다. 이 함수는 매칭된 결과 앞에 위치한 문자열 시퀀스, 즉 접두사(prefix) 부분을 얻을 때 사용됩니다. 함수를 호출하면 매칭 구간 이전의 문자열에 대한 상수 참조(constant reference)가 반환됩니다.

문법

match_results.prefix();

매개변수

이 함수는 어떠한 매개변수도 받지 않습니다.

반환 값

매칭된 시퀀스 앞에 있는 문자열(시퀀스)의 상수 참조를 반환합니다.

예제

입력: string str = "Tutorials Points";
    regex R("Points");
    smatch Mat;
    regex_search(str, Mat, R);
    Mat.prefix();
출력: Tutorials

prefix() 구현 예제

#include <bits/stdc++.h>
using namespace std;
int main() {
    string str = "Tutorials Points";
    regex R("Points");
    smatch Mat;
    regex_search(str, Mat, R);
    cout<<"String prefix is : ";
    if (!Mat.empty()) {
        cout << Mat.prefix();
    }
    return 0;
}

실행 결과

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

String prefix is : Tutorials

위 예제에서 정규 표현식 "Points"가 문자열 내에서 매칭되었고, prefix()를 통해 매칭 지점 앞의 "Tutorials"가 출력된 것을 확인할 수 있습니다.

match_results::suffix()란?

match_results::suffix() 역시 C++ STL의 내장 함수로, <regex> 헤더 파일에 정의되어 있습니다. 이 함수는 매칭된 결과 뒤에 위치한 문자열 시퀀스, 즉 접미사(suffix) 부분을 얻을 때 사용됩니다. 함수를 호출하면 매칭 구간 이후의 문자열에 대한 상수 참조가 반환됩니다.

문법

match_results.suffix();

매개변수

이 함수는 어떠한 매개변수도 받지 않습니다.

반환 값

매칭된 시퀀스 뒤에 있는 문자열(시퀀스)의 상수 참조를 반환합니다.

예제

입력: std::string str("Tutorials Points is the best");
    std::smatch Mat;
    std::regex re("Points");
    std::regex_search(str, Mat, re);
    Mat.suffix();
출력: is the best

suffix() 구현 예제

#include <bits/stdc++.h>
using namespace std;
int main() {
    string str = "Tutorials Points is the best";
    regex R("Points");
    smatch Mat;
    regex_search(str, Mat, R);
    cout<<"String suffix is : ";
    if (!Mat.empty()) {
        cout << Mat.suffix();
    }
    return 0;
}

실행 결과

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

String suffix is : is the best

정리

prefix()와 suffix()는 각각 정규 표현식으로 매칭된 부분 문자열의 앞쪽뒤쪽 시퀀스를 반환하는 함수입니다. 두 함수 모두 매개변수를 받지 않으며, 매칭 결과가 존재할 때 해당 영역의 문자열을 상수 참조 형태로 돌려줍니다. 참고로 부분 문자열 검색에는 regex_match()가 아닌 regex_search()를 사용해야 하며, regex_match()는 문자열 전체가 패턴과 일치해야만 성공하기 때문에 주의가 필요합니다. 로그 파싱, 텍스트 분석 등 매칭 구간의 앞뒤 맥락이 필요한 작업에서 두 함수를 활용하면 매우 유용합니다.