Ich schrieb das folgende einfache Beispiel:Verständnis C++ regex durch ein einfaches Beispiel
#include <iostream>
#include <string>
#include <regex>
int main()
{
std::string str("1231");
std::regex r("^(\\d)");
std::smatch m;
std::regex_search(str, m, r);
for(auto v: m) std::cout << v << std::endl;
}
und verlor sein Verhalten verwirrt. Wenn ich den Zweck der match_result
von there richtig verstanden habe, sollte die einzige 1
gedruckt worden sein. Tatsächlich:
Wenn dies gelingt, ist es nicht leer und enthält eine Reihe von sub_match Objekten: das erste sub_match Element entspricht das gesamte Spiel, und, wenn der reguläre Ausdruck enthaltenen Unterausdrücke angepasst werden ([...])
die Zeichenfolge an die Funktion übergeben nicht die Regex, deshalb sollten wir nicht haben the entire match
hatte.
Was habe ich vermisst?
Sie erhalten immer noch die * gesamte Übereinstimmung *, aber die * gesamte Übereinstimmung * passt nicht zur * gesamten Zeichenkette * sie passt zur * gesamten Regex *. – Galik