Post List

2014년 12월 29일 월요일

regex_iterator , regex_token_iterator

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

댓글 없음:

댓글 쓰기