我正在使用HTTP库(winhttp)2周,现在我想改进我的RegExp用于检索目标网站上的一些数据。
给出以下HTML代码:
Total Posts:</span> 22,423</li>
现在我想要做的只是检索数字并将其存储到变量中:
regex = "Total Posts:</span> \\S+";
if(std::regex_search(regexs, regexmatch, regex))
{
temp = regexmatch[0];
found = temp.find(",");
if(found != std::string::npos)
temp.erase(found, 1);
temp.erase(0, 19);
temp.erase(temp.end() - 5, temp.end());
User._Posts = ConvertStringToInteger(temp);
}
为此使用了一些RegExp并剥离了部件,因为我不知道如何只检索模式,而不是整个结果。希望有人理解我。已经查阅了文档,但没有发现什么可以帮助我。
答案 0 :(得分:0)
要仅匹配所需的模式,您需要使用std::regex_search
的捕获组。
捕获组用于捕获正则表达式中的匹配区域,每个捕获的区域由sub_match
表示。您可以使用smatch
match_results
专精来处理字符串子匹配,然后使用运算符[]
来获得匹配。
示例:
const std::string foo = "Total Posts:</span> 22,423</li>";
std::regex rgx("Total Posts:</span> ([^<]+)");
std::smatch match;
if (std::regex_search(foo.begin(), foo.end(), match, rgx)) {
std::cout << match[1] << '\n';
}
输出:
22,423