Boost.Regex分隔符解析

时间:2012-11-01 14:35:30

标签: c++ regex boost delimiter

这是一个很快的问题,我在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;
}

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

1 个答案:

答案 0 :(得分: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++ << ") ";
       }
   }