正则表达式匹配组提升 C++
Regex matching groups boost c++
[菜鸟角]
您好,
我正在尝试根据匹配的字符串使用 boost 正则表达式捕获一组,但我认为我使用了错误的方法。
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
Match 1 (username) : NULL
Match 2 (server) : my.server.eu
Match 3 (password) : NULL
我在网上搜索过,但我没有找到关于捕获组识别的明确答案。
谢谢
您实际上有 6 个而不是 3 个匹配组。
您的正则表达式的组织方式使得奇数匹配组将匹配键值(即:用户名 myusername),而偶数匹配组将匹配实际值(即:myusername)。
因此您必须查找组 2、4 和 6 以获取用户名、服务器和密码值。
[菜鸟角]
您好, 我正在尝试根据匹配的字符串使用 boost 正则表达式捕获一组,但我认为我使用了错误的方法。
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
Match 1 (username) : NULL
Match 2 (server) : my.server.eu
Match 3 (password) : NULL
我在网上搜索过,但我没有找到关于捕获组识别的明确答案。
谢谢
您实际上有 6 个而不是 3 个匹配组。
您的正则表达式的组织方式使得奇数匹配组将匹配键值(即:用户名 myusername),而偶数匹配组将匹配实际值(即:myusername)。
因此您必须查找组 2、4 和 6 以获取用户名、服务器和密码值。