이 글에서는 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();
출력: Tutorialsprefix() 구현 예제
#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 bestsuffix() 구현 예제
#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()는 문자열 전체가 패턴과 일치해야만 성공하기 때문에 주의가 필요합니다. 로그 파싱, 텍스트 분석 등 매칭 구간의 앞뒤 맥락이 필요한 작업에서 두 함수를 활용하면 매우 유용합니다.