标记 boost::regex 匹配

Posted

技术标签:

【中文标题】标记 boost::regex 匹配【英文标题】:Tokenizing boost::regex matches 【发布时间】:2014-10-13 15:04:40 【问题描述】:

我创建了一个正则表达式来匹配具有以下结构的文件的行: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&lt;string,pair&lt;int,int&gt;&gt;。如何标记 boost:regex 的匹配来实现这一点?

【问题讨论】:

您应该使用括号"capture" 正则表达式中的部分,例如(\\d) 在正则表达式模式中。 【参考方案1】:

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

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

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

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

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

这样,由 (\w+)(一个或多个单词字符)匹配的内容将在 match[1] 中,第一个 (\d+) 在 matches[2] 中,第二个 (\d+) 在 match[3] 中。当然,当你把它放在 C++ 字符串中时,你需要放双 \。

【讨论】:

以上是关于标记 boost::regex 匹配的主要内容,如果未能解决你的问题,请参考以下文章

boost::string or boost::regex

Boost:regex_search - 括号之间的匹配字符串

使用 Boost::regex 进行正则表达式组匹配

Boost Regex 提供空白捕获

boost库之正则表达式regex

正则表达式搜索匹配不使用组