regex_iterator
문자열에 정규식에 Match하는 부분이 하나 이상 있는 경우 match_results 로는 처음 Match된 결과만을 볼 수 있다. regex_iterator 를 이용하면 모든 Match된 결과들을 볼 수 있다.
#include <regex> #include <iostream> using namespace std; int main() { string str = "icysowrd@nate.com; sjyun@warevally.com;;; orange@warevalley.com"; smatch m; regex e("([[:w:]]+)@([[:w:]]+)\.com"); sregex_iterator pos(str.cbegin(), str.cend(), e); sregex_iterator end; // Default constructor defines past-the-end iterator for (; pos != end; pos++) { cout << "Matched: " << pos->str(0) << endl; cout << "User Name: " << pos->str(1) << endl; cout << "Domain: " << pos->str(2) << endl << endl; } cin >> str; }
regex_token_iterator
regex_iterator와는 다르게 하나의 token 만을 볼 수 있다. 선언할 때 마지막 인수값이 default 는 0 (Match 된 문자열 전부) 이며, 1 이상의 값을 입력하면 해당 그룹 문자열 만을 보여준다.
#include <regex> #include <iostream> using namespace std; int main() { string str = "icysowrd@nate.com; sjyun@warevally.com;;; orange@warevalley.com"; smatch m; regex e("([[:w:]]+)@([[:w:]]+)\.com"); sregex_token_iterator pos(str.cbegin(), str.cend(), e, 1); // default 0 sregex_token_iterator end; // Default constructor defines past-the-end iterator for (; pos != end; pos++) cout << "Matched: " << pos->str() << endl; cin >> str; return 0; }
댓글 없음:
댓글 쓰기