正则表达式匹配组提升c ++

时间:2016-11-03 17:30:54

标签: c++ regex boost-regex

[Noob Corner]

您好, 我正在尝试使用boost regex捕获一个组,具体取决于匹配的字符串,我认为我使用了错误的方法。

boost::regex expr(R"(:?(:?\busername *(\S*))|(:?\bserver *(\S*))|(:?\bpassword *(\S*)))");
std::vector<std::string > vec = { "server my.server.eu", "username myusername", "password mypassword" };

for (auto &elem : vec)
{
   if (boost::regex_match(elem, expr, boost::match_extra))
    {
         boost::smatch what;
         boost::regex_search(elem, what, expr);

         std::cout << "Match 1 (username) : " << what[1].str() << std::endl;
         std::cout << "Match 2 (server) : " << what[2].str() << std::endl;
         std::cout << "Match 3 (password) : " << what[3].str() << std::endl;
     }
}

我想要类似的东西:

server my.server.eu
  

匹配1(用户名):NULL
  匹配2(服务器):my.server.eu
  匹配3(密码):NULL

我在互联网上搜索但我没有找到关于识别捕获组的明确答案。

由于

1 个答案:

答案 0 :(得分:1)

您实际上有6个而不是3个匹配组。

您的正则表达式的组织方式使得奇数匹配组将匹配键值(即:用户名myusername),而偶数匹配组将匹配实际值(即:myusername)。

因此,您必须查找第2,4和6组以获取用户名,服务器和密码值。