Ich habe versucht, dies für mehrere Tage zu tun, aber immer noch nicht das richtige Ergebnis.Regex - erhalten mehrere Aufnahmen an mehreren Linien und ihre Positionen
Ich muss alle Captures aus einer ganzen Zeichenfolge (einschließlich Zeilenumbrüche) erhalten, aber nicht nach dem ersten übereinstimmen. Ich habe diese Regex: (\d+)\s*;
. Das Ergebnis sollte nur Zahlen sein (nicht die Leerzeichen und Semikolon danach) und es sollte sie von der ganzen Eingabezeichenfolge (die mehrzeilig ist) nehmen.
So zum Beispiel von diesem Eingang:
5;
6 ;
7;
8 ;
Es sollte "5" zurück "6", "7" und "8".
Wer weiß, wie man das in C++ macht?
Danke!
EDIT:
Von Links in den Kommentaren erwähnt, kam ich mit diesem Code auf:
std::regex regex(regex_str, std::regex_constants::icase);
for (std::sregex_iterator it = std::sregex_iterator(input.begin(), input.end(), regex); it != std::sregex_iterator(); ++it)
{
std::smatch m = *it;
std::cout << "\t" << m[1].str() << std::endl;
}
Es funktioniert ganz gut, aber es gibt eine Sache, die ich vergaß zu erwähnen: I Außerdem müssen Sie die Position jedes Captures erhalten. Mit m.position()
kann ich die Position des gesamten Matches ermitteln, aber wenn es etwas vor der gefangenen Gruppe gibt, die ich suche, sagt es mir eine falsche Position. Also, wie kann ich eine Position des Captures bekommen?
Bitte Code zeigen. Ich bin sicher, dass Sie nur mit 'match_object [1] .str()' auf den erfassten Wert zugreifen können. –
Um mehrere Übereinstimmungen zu erhalten, gibt es mehr als 1 Möglichkeit. Siehe [diese Antwort] (http://stackoverflow.com/questions/32765512/what-does-stdmatch-resultsize-return/32765645#32765645) für ein Beispiel, wie es gemacht werden kann. –