Extrahieren von submatches mit boost regex in c++
Ich versuche zu extrahieren submatches aus einer text-Datei mit boost regex. Derzeit bin ich nur zurückgeben die erste gültige Zeile und die volle Linie anstelle des gültigen E-Mail-Adresse. Ich habe versucht, mit Hilfe der iterator und Verwendung von submatches, aber ich war nicht mit Erfolg mit. Hier ist der aktuelle code:
if(Myfile.is_open()) {
boost::regex pattern("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$");
while(getline(Myfile, line)) {
string::const_iterator start = line.begin();
string::const_iterator end = line.end();
boost::sregex_token_iterator i(start, end, pattern);
boost::sregex_token_iterator j;
while ( i != j) {
cout << *i++ << endl;
}
Myfile.close();
}
InformationsquelleAutor John | 2011-09-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden boost::smatch.
War der regex, danke.
InformationsquelleAutor
Die Ausgabe ist die folgende
Boost verwendet die eingeklammerten submatches, und die ersten submatch ist immer die volle übereinstimmenden Zeichenfolgen. regex_match hat, um die gesamte Linie der input gegen das pattern, wenn Sie versuchen, eine übereinstimmung mit einem Teil der Zeichenfolge, verwenden regex_search statt.
Dem Beispiel, das ich oben verwendet verwendet die posix-extended regex-syntax, die angegeben ist mit der boost::regex::erweiterte parameter. Das auslassen dieser parameter-änderungen die syntax von perl style regex-syntax. Andere regex-syntax verfügbar ist.
InformationsquelleAutor
Diese Zeile:
verursacht Fehler in visual c++ (getestet habe ich vor 2012, aber erwarten, dass die frühere version auch)
Sehen https://groups.google.com/forum/?fromgroups#!Thema/cpp-Netzwerkbibliothek/0Szv2WcgAtc für die Analyse.
InformationsquelleAutor