觉得有必要改进我的RegExp

时间:2013-10-21 07:04:29

标签: c++ regex

我正在使用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并剥离了部件,因为我不知道如何只检索模式,而不是整个结果。希望有人理解我。已经查阅了文档,但没有发现什么可以帮助我。

1 个答案:

答案 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