Hur går jag igenom resultat från std::regex_search?

Hur går jag igenom resultat från std::regex_search?

regex_token_iterator tar ett valfritt fjärde argument som anger vilken delmatchning som returneras för varje iteration. Standardvärdet för detta argument är 0, vilket i fallet med C++ (och många andra) regexes betyder "hela matchningen". Om du vill få den första fångade delmatchningen, skicka helt enkelt 1 till konstruktorn:

const std::sregex_token_iterator End;
Expression.assign("rel=\"nofollow\">(.*?)</a>");
for (std::sregex_token_iterator i(Tables.begin(), Tables.end(), Expression, 1); i != End; ++i)
{
    std::cout << *i << std::endl; // *i only yields the captured part
}

std::regex_search söker efter regex bara en gång. Det returnerar inte en lista med matchningar, utan en lista med submatchade uttryck (de inom parentes). Det är därför du bara får en Match[1] , texten inuti länktaggen.

När det gäller den andra koden, returnerar den faktiskt alla matchningar, men den returnerar dig igen match_results objekt, så du måste använda [] operatör:

const std::sregex_iterator End;
Expression.assign("rel=\"nofollow\">(.*?)</a>");
for (std::sregex_iterator i(Tables.begin(), Tables.end(), Expression); i != End; ++i)
{
    std::cout << (*i)[1] << std::endl; // first submatch, same as above.
}