regex_search
Regular Expression 에 해당하는 문자열을 포함하고 있으면 true 아니면 false를 return 한다.
(regex_match는 정규식과 딱 맞는 것만 true)
이런 단순히 문자열을 찾는 기능 뿐만 아니라 match_results 를 함께 사용하면 좀 더 다양하게 활용이 가능하다.
.com으로 끝나는 e-mail 주소를 찾는 정규식은 아래와 같다.
regex e("[[:w:]]+@[[:w:]]+\.com");
정규식에는 괄호 ( ) 를 이용하여 그룹을 나눌수가 있다. 사용자 이름 쪽과 도메인쪽을 별도의 그룹으로 나눴을 때,
regex e("([[:w:]]+)@([[:w:]]+)\.com");
정규식에 만족하는 문자열, 각 그룹별 문자열, 정규식에 Match 된 부분 앞, 뒤의 문자열을 각각 찾아 낼 수 있다.
match_results 를 m 으로 선언하였을 때,
m[0].str() : Match된 문자열 전체
m[n].str() : n번째 그룹의 문자열 ( m[n].str() 은 m.str(n), *(m.begin()+n) 와 동일 )
m.prefix().str() : 정규식의 앞부분
m.suffix().str() : 정규식의 뒷부분
#include <regex> #include <iostream> using namespace std; int main() { string str; smatch m; // typedef match_results<string::const_iterator> smatch; regex e("([[:w:]]+)@([[:w:]]+)\.com"); while (true) { cin >> str; bool found = regex_search(str, m, e); cout << "m.size() " << m.size() << endl; for (int n = 0; n < m.size(); n++) { cout << "m[" << n << "]: str()= " << m[n].str() << endl; } cout << "m.prefix().str() : " << m.prefix().str() << endl; cout << "m.suffix().str() : " << m.suffix().str() << endl; } }
댓글 없음:
댓글 쓰기