문자열을 검색하거나 대체하는 데 사용되는 패턴
.
임의의 한 문자를 나타냄
ex) a.c는 "abc", "a9c", "a#c" 등과 일치
*
앞의 요소가 0번 이상 반복됨을 나타냄
ex) a*는 "", "a", "aa", "aaa" 등과 일치
+
앞의 요소가 1번 이상 반복됨을 나타냄
ex) a+는 "a", "aa", "aaa" 등과 일치
?
앞의 요소가 0번 또는 1번 나타남을 나타냄
ex) a? "", "a" 와 일치
∖∖d
숫자를 나타냄
"0"에서 "9"까지의 어떤 숫자와도 일치
∖∖w
"word character"를 나타냄
알파벳, 숫자, 밑줄(_)과 일치
∖∖s
공백문자를 나타냄
탭, 캐리지 리턴, 줄 바꿈, 공백 등과 일치
∖∖b
단어 경계를 나타냄
단어의 시작과 끝을 구분
[...]
대괄호 안의 어떤 문자와도 일치
[abc]는 "a", "b", "c"와 일치
[^...]
대괄호 안의 문자를 제외한 어떤 문자와도 일치
[^abc]는 "a", "b", "c"를 제외한 모든 문자와 일치
^
문자열 또는 줄의 시작을 나타냄
^a는 "a"로 시작하는 문자열과 일치
$
문자열 또는 줄의 끝을 나타냄
$a는 "a"로 끝나는 문자열과 일치
(100+1+ | 01)+
- 100+
100뒤에 0이 하나 이상 나오는 문자열
ex) 1000, 10000
- 1+
1이 하나 이상 나오는 문자열
ex) 11, 1111
- 100+1+
100뒤에 0이 하나 이상 있고, 그 뒤에 1이 하나 이상 있는 문자열
ex) 1000011
- 100+1+ | 01
100+1+ 패턴이나 01 패턴 중 하나
ex) 10001111, 01
- (100+1+ | 01)+
위 패턴이 하나 이상 반복되는 문자열
ex) 100011110101, 01100001101
∖∖b010-∖∖d{4}-∖∖d{4}∖∖b
- ∖∖b010-
문자열이 010-로 시작한다는 의미
이는, 010-이 다른 숫자 또는 문자에 의해 중간에 끼여있지 않음을 보장
- ∖∖d{4}
4자리의 숫자를 의미
- ∖∖b
문자열의 끝을 의미
#include <iostream>
#include <regex>
using namespace std;
bool matchWord(const string& password)
{
regex e("\\b452~\\d{3}!135+");
return regex_match(password, e);
}
int main()
{
string input;
cout << "입력 : ";
cin >> input;
if(matchWord(input))
cout << "암호 입력에 성공하였습니다.\n";
else
cout << "암호 입력에 실패하였습니다.\n";
return 0;
}


#include <iostream>
#include <regex>
using namespace std;
int main()
{
string input;
cout << "입력 : ";
getline(cin, input);
regex e("\\w+bug~+");
regex_iterator<string::iterator> rit(input.begin(), input.end(), e);
regex_iterator<string::iterator> rend;
while(rit != rend)
{
cout << rit->str() << endl;
++rit;
}
return 0;
}

#include <iostream>
#include <regex>
using namespace std;
int main()
{
string input, tmp;
cout << "입력 : ";
getline(cin, input);
cout << "대체할 단어 : ";
cin >> tmp;
regex e("\\w+bug~+");
string result;
regex_replace(back_inserter(result), input.begin(), input.end(), e, tmp);
cout << result;
return 0;
}
