Tokenizing boost :: regex匹配

时间:2014-10-13 15:04:41

标签: c++ regex boost

我创建了一个正则表达式来匹配具有以下结构的文件行:string int int

int main()
{
   std::string line;
   boost::regex pat("\\w\\s\\d\\s\\d");

   while (std::cin)
   {
       std::getline(std::cin, line);
       boost::smatch matches;
       if (boost::regex_match(line, matches, pat))
           std::cout << matches[2] << std::endl;
   }
}

我想将这些数字保存到pair<string,pair<int,int>>。我怎样才能将boost:regex的匹配标记为实现此目的?

1 个答案:

答案 0 :(得分:1)

首先,你的正则表达式接受&#34;一个单词字符然后一个空格然后一个数字然后一个空格然后一个数字&#34;,我打赌这不是你想要的。很可能你希望你的表达看起来像:

\w+\s+\d+\s+\d+

其中\ w +现在表示&#34;一个或多个单词字符&#34;。如果您确定令牌之间只有一个空格,则可以在\ s之后省略+但这样更安全。

然后你需要选择你表达的部分内容。这在RE中称为子表达式:

(\w+)\s+(\d+)\s+(\d+)

这种匹配方式(\ w +)(一个或多个单词字符)将匹配[1],匹配[2]中的第一个(\ d +)和匹配[3]中的第二个(\ d +)。当你把它放在C ++字符串中时,你需要加上\。