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;
}

+ Recent posts