C++ 11 부터 표준에 포함된 정규 표현식(regular expression)
- std::regex_match 를 이용해서 정규 표현식으로 전체 문자열 패턴 매칭하기.
- std::regex_search 를 이용해서 정규 표현식으로 문자열 검색하기
- std::regex_replace 를 이용해서 정규 표현식으로 문자열 치환하기
? | 물음표는 0번 또는 1차례까지의 발생을 의미한다. 이를테면 colou?r는 "color"와 "colour"를 둘 다 일치시킨다. |
* | 별표는 0번 이상의 발생을 의미한다. 이를테면 ab*c는 "ac", "abc", "abbc", "abbbc" 등을 일치시킨다. |
+ | 덧셈 기호는 1번 이상의 발생을 의미한다. 이를테면 ab+c는 "abc", "abbc", "abbbc" 등을 일치시키지만 "ac"는 일치시키지 않는다. |
{n}[6] | 정확히 n 번만큼 일치시킨다. |
{min,}[6] | "min"번 이상만큼 일치시킨다. |
{min,max}[6] | 적어도 "min"번만큼 일치시키지만 "max"번을 초과하여 일치시키지는 않는다. |
예제1 - 백준 2671 문제
#include <iostream>
#include <regex>
#include <string>
using namespace std;
string s;
regex re("(100+1+|01)+");
void solve() {
cin >> s;
if (regex_match(s, re)) {
cout << "SUBMARINE" << endl;
}
else {
cout << "NOISE" << endl;
}
}
int main(void)
{
solve();
return 0;
}