1

This is rather a quick question, I just couldn't find it in the boost documentation nor any other boost regex examples/tutorials.

Suppose I want to tokenize a string using this implementation:

boost::regex re("[\\sXY]+");
std::string s;

while (std::getline(std::cin, s)) {
  boost::sregex_token_iterator i(s.begin(), s.end(), re, -1);
boost::sregex_token_iterator j;
  while (i != j) {
     std::cout << *i++ << " ";
  }
  std::cout << std::endl;
}

The problem is that the delimiter expression won't be iterated. I also need the delimiter string. How can I make sure of this?

4

1 に答える 1

0

私が正しく理解している場合は、トークンを反復処理するだけでなく、区切り記号も反復処理する必要があります。正規表現によって識別されるトークンを探す別のトークン イテレータを作成するだけで十分ではないでしょうか?

 boost::sregex_token_iterator i(s.begin(), s.end(), re, -1);

 boost::sregex_token_iterator j;
 //now find the tokens that match the regex -> the delimiters
 boost::sregex_token_iterator begin(s.begin(), s.end(), re), end;
 while (i != j)
   {
     std::cout << *i++ << " ";
     if( begin != end)
       {
         std::cout << "(delimiter = " << *begin++ << ") ";
       }
   }
于 2012-11-01T18:34:19.063 に答える