1

这是一个相当简单的问题,我只是在 boost 文档或任何其他 boost 正则表达式示例/教程中都找不到它。

假设我想使用这个实现标记一个字符串:

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

问题是分隔符表达式不会被迭代。我还需要分隔符字符串。我怎样才能确定这一点?

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 回答