gpt4 book ai didi

C++ boost::regex 倍数捕获

转载 作者:行者123 更新时间:2023-11-28 02:51:40 26 4
gpt4 key购买 nike

由于 boost::regex,我正在尝试恢复多个子字符串,并将每个子字符串放入一个 var 中。这是我的代码:

unsigned int i = 0;
std::string string = "--perspective=45.0,1.33,0.1,1000";
std::string::const_iterator start = string.begin();
std::string::const_iterator end = string.end();
std::vector<std::string> matches;
boost::smatch what;
boost::regex const ex(R"(^-?\d*\.?\d+),(^-?\d*\.?\d+),(^-?\d*\.?\d+),(^-?\d*\.?\d+))");

string.resize(4);

while (boost::regex_search(start, end, what, ex)
{
std::string stest(what[1].first, what[1].second);
matches[i] = stest;
start = what[0].second;
++i;
}

我正在尝试提取字符串的每个 float 并将其放入我的 vector 变量匹配项中。目前,我的结果是我可以提取第一个(在我的 vector var 中,我可以看到没有双引号的“45”)但是我的 vector var 中的第二个是空的(matches[1] 是“”) .

我不知道为什么以及如何纠正这个问题。所以我的问题是如何纠正这个?我的正则表达式不正确吗?我的匹配不正确?

最佳答案

  1. 首先,^是行首符号。其次,\ 必须转义。因此,您应该将每个 (^-?\d*\.?\d+) 组固定为 (-?\\d*\\.\\d+)。 (可能 (-?\\d+(?:\\.\\d+)?) 更好。)

  2. 您的正则表达式搜索 number,number,number,number 模式,而不是每个数字。您只将第一个子字符串添加到 matches 并忽略其他子字符串。要解决此问题,您可以将表达式替换为 (-?\\d*\\.\\d+) 或将存储在 what 中的所有匹配项添加到您的 匹配 vector :

 while (boost::regex_search(start, end, what, ex))
{
for(int j = 1; j < what.size(); ++j)
{
std::string stest(what[j].first, what[j].second);
matches.push_back(stest);
}
start = what[0].second;
}

关于C++ boost::regex 倍数捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22897472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com