正则表达式匹配组增强c++

Regex matching groups boost c++

本文关键字:增强 c++ 正则表达式      更新时间:2023-10-16

[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 (username): NULL
匹配2(服务器):my.server.eu
匹配3(密码):NULL

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

谢谢

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

你的正则表达式以这样的方式组织:奇数匹配组将匹配一个键值(即:username myusername),而偶数匹配组将匹配实际值(即:myusername)。

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