Ich vergesse reguläre Ausdrücke schneller als der Geburtstag meiner Mutter. Es ist eine wichtige PITA. Jedenfalls wollte ich einen RE für das Parsen der HTTP-Response-Statuszeile und das korrekte Erfassen der Unterelemente. Ich habe diese Arbeit:Tokening Text mit Boost Regex
const boost::regex status_line("HTTP/(\\d+?)\\.(\\d+?) (\\d+?) (.*)\r\n");
std::string status_test1("HTTP/1.1 200 hassan ali\r\n");
boost::smatch what;
std::cout << regex_match(status_test1,what, status_line, boost::match_extra) << std::endl;
std::cout << what.size() << std::endl;
BOOST_FOREACH(std::string s, what)
{
std::cout << s << std::endl;
}
Die 4. Capture-Gruppe ist es, was ich war Getue, vor allem die Worte tokenising. Aber ich brauche es nicht, also ist meine Arbeit erledigt. Allerdings möchte ich immer noch wissen, wie man einen durch Leerzeichen getrennten Satz, der mit einem '\ 0' endet, in einen Vektor/ein Array von entfernten Wörtern zerlegt.
kann ich nicht bekommen das folgende Fragment
const boost::regex sentence_re("(.+?)((.+?))*");
boost::smatch sentence_what;
std::string sentence("hassan ali syed ");
std::cout << boost::regex_match(sentence,sentence_what,sentence_re, boost::match_extra) << std::endl;
BOOST_FOREACH(std::string s, sentence_what)
{
std::cout << s << std::endl;
}
es nicht "hassan ali syed "
übereinstimmen sollten arbeiten, aber es sollte "hassan ali syed"
übereinstimmen, und die Capture-Gruppe ausgeben sollte hassan
ali
syed
(mit Zeilenumbrüchen), aber es Ausgänge hassan
syed
syed
(beachten Sie, der Raum in der dritten syed <space>syed
. ich nehme an Einfanggruppen nicht mit rekursiven Entitäten umgehen können?
Gibt es also eine saubere Möglichkeit, eine Token-Task in der PCRE-Syntax anzugeben, die zu einem sauberen Token-Vektor führt (ohne Wiederholung - z. B. möchte ich nicht, dass die verschachtelte Gruppe versucht, den Leerraum zu streichen).
Ich weiß, dass dies nicht das richtige Werkzeug für den Job ist, spirit/lexx oder boost :: tokenise ist am besten, und ich weiß, dass es nicht der richtige Weg ist. In .net, wenn ich Screen Scraping durchführe, würde ich Token in Textkörpern finden, indem ich wiederholt einen regulären Ausdruck auf den Körper anwende, bis ihm die Token ausgehen.
Hinweis: Ich bin kein C++ oder boost :: regexp Benutzer. –