이 글에서는 C++ STL에서 match_results::empty() 함수의 동작 방식, 문법, 그리고 실제 예제를 통해 정규식 매칭 결과를 확인하는 방법을 자세히 알아보겠습니다.
C++ STL에서 match_results란 무엇인가?
std::match_results는 정규식(regex) 매칭 작업에서 대상 문자열 시퀀스와 일치하는 문자 시퀀스들의 컬렉션을 저장하는 특수한 컨테이너 유사 클래스입니다. 이 컨테이너 안에서 정규식 매칭 연산이 수행되며, 대상 시퀀스에서 찾은 매치 결과들이 저장됩니다.
match_results::empty()란 무엇인가?
match_results::empty() 함수는 C++ STL의 내장 함수로, <regex> 헤더 파일에 정의되어 있습니다. 이 함수는 연관된 smatch 객체가 비어 있는지, 아니면 매치 값이 포함되어 있는지를 확인합니다.
- 매치 객체가 비어 있거나 매치 결과가 하나도 없으면 true를 반환합니다.
- 컨테이너에 매치 값이 존재하면 false를 반환합니다.
문법(Syntax)
smatch_name.empty();
매개변수(Parameters)
이 함수는 어떤 매개변수도 받지 않습니다.
반환값(Return Value)
이 함수는 불리언(Boolean) 값을 반환합니다.
- 매치 객체가 비어 있거나 컨테이너에 매치 결과가 없으면 true
- 매치 객체에 값이 있거나 매치 결과가 존재하면 false
기본 예제
입력: std::smatch;
smatch.empty();
출력: true실전 코드 예제
아래 예제에서는 두 개의 서로 다른 정규식 패턴으로 문자열을 매칭하고, empty() 함수를 활용해 매칭 성공 여부를 판단합니다.
#include<bits/stdc++.h>
using namespace std;
int main() {
string str("Tutorials");
regex R_1("Points.*");
regex R_2("Tutorials.*");
smatch Mat_1, Mat_2;
regex_match(str, Mat_1, R_1);
regex_match(str, Mat_2, R_2);
if (Mat_1.empty()) {
cout<<"String doesn't matches with Regex-1" << endl;
} else {
cout << "String matches with Regex-1" << endl;
}
if (Mat_2.empty()) {
cout << "String doesn't matches with Regex-2" << endl;
} else {
cout << "String matches with Regex-2" << endl;
}
return 0;
}코드 설명
위 코드에서 문자열 "Tutorials"는 첫 번째 정규식 R_1("Points.*")와 일치하지 않으므로 Mat_1은 비어 있게 되고, empty()가 true를 반환하여 "매칭 실패" 메시지가 출력됩니다. 반면 두 번째 정규식 R_2("Tutorials.*")와는 일치하므로 Mat_2에 매치 결과가 저장되고, empty()가 false를 반환하여 "매칭 성공" 메시지가 출력됩니다.
실행 결과(Output)
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
String doesn't matches with Regex-1 String matches with Regex-2
정리
match_results::empty() 함수는 정규식 매칭이 성공했는지 여부를 간결하게 확인할 수 있는 유용한 도구입니다. 매칭 실패 시 빈 객체가 반환되므로, 조건문과 함께 사용하면 코드의 가독성과 안정성을 높일 수 있습니다.