我試圖恢復倍數子串感謝boost :: regex,並把每一個變種。在這裏我的代碼:C++ boost :: regex倍數捕獲
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;
}
我想提取我的字符串的每個浮點並把它放在我的矢量變量匹配。目前,我的結果是,我可以提取第一個(在我的向量var中,我可以看到「45」沒有雙引號),但第二個在我的向量var中是空的(matches [1]是「」) 。
我找不出爲什麼以及如何解決這個問題。所以我的問題是如何糾正這個問題?我的正則表達式不正確嗎?我的比賽不正確?
我改變了我的正則表達式是:R「(^ - 透視=( - ?\ d * \ \ d +),( - ??\ d * \ \ d +),( - ??\ d * \ \ d +),( - ???\ d * \ \ d +) )「);但在你的解決方案中,我的第一個var包含第一個float的所有字符串。你知道爲什麼嗎 ? –
@LaurentD。通過將parens添加到開頭和結尾,您將所有表達式分組。試試:'R'(?:^ - perspective =( - ?\ d * \。?\ d +),( - ?\ d * \。?\ d +),( - ?\ d * \。?\ d + ),( - ?\ d * \。?\ d +))「'或'R」^ - perspective =( - ?\ d * \。?\ d +),( - ?\ d * \。?\ d + ),( - ?\ d * \。?\ d +),( - ?\ d * \。?\ d +)「'代替。請記住,每個paren在正則表達式中都很重要。 :) – alphashooter