0

現在、HTTP ライブラリ (winhttp) を 2 週間使用していますが、ターゲット Web サイトでデータを取得するために 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 を使用し、部分を取り除きました。うまくいけば、誰かが私を理解してくれます。すでにドキュメントを調べましたが、私を助けることができるものは何も見つかりませんでした.

4

1 に答える 1

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
于 2013-10-21T08:04:13.980 に答える