Ich verstehe es nicht. Ich habe diese regulären Ausdruck:Boost :: Regex Problem, Matching ein HTML-Span-Element
<span class="copy[Green|Red].*>[\s]*(.*)[\s]*<\/span>
bestimmte Teile von HTML-Code (ein Teil zwischen Spannweiten) übereinstimmen. Zum Beispiel die folgende:
<span class="copyGreen">0.12</span> <span class="copyRed"> 0.12 </span>
Nun, das schön mit RegexBuddy arbeitet und andere, aber mit boost :: regex Ich habe ein Problem. Es passt nicht zusammen.
EDIT: Um genauer zu sein, möchte ich die Zahl zwischen den Spannen erfassen. Vor und nach der Nummer kann es auch Leerzeichen geben (\ n, \ r, etc.).
Hier ist der Code, den ich gemacht habe:
try {
const boost::regex e("<span class=\"copy[Green|Red].*>[\\s]*(.*)[\\s]*<\\/span>");
boost::smatch matches;
std::string html("<span class=\"copyGreen\"> 0.12 </span>");
if (boost::regex_match(html, matches, e)) {
// Works... (not).
} else {
throw std::runtime_error("Couldn't match the regex against HTML-source!");
}
} catch (boost::regex_error& e) {
std::cout << e.what() << std::endl;
}
Was mache ich falsch hier? Danke im Voraus!
EDIT:
Es scheint, dass der richtige Ausdruck würde
boost::regex("<span class=\"copy(?:Green|Red)[^>]*>\\s*(.*?)\\s*<\\/span>"); // Thanks chaos!.
sein Dies ist eigentlich mit Boost-Spiele auf. Allerdings musste ich boost :: match_extra aktivieren, um alle Captures zu erhalten, die ich brauchte. Dies geschah durch die Definition
BOOST_REGEX_MATCH_EXTRA
in boost \ regex \ user.hpp
Danke noch einmal.
Umm .. sollte es nicht mit copyGreen oder copyRed übereinstimmen? Ich glaube nicht, dass ich falsch liege .. Bitte erklären Sie ein bisschen weiter, was und warum ich falsch mache. Vielen Dank. – nhaa123
Eckige Klammern stehen für eine Übereinstimmung mit einem Zeichen. Das ist [grün | rot] ist identisch mit [gren | d] - es entspricht g OR r OR e OR n OR | ODER d.Bei Zeichenfolgen möchten Sie eine Alternierung, die in Klammern gruppiert werden muss, um zu verhindern, dass sie auf den gesamten Ausdruck angewendet wird. –
Hah, OK. Ich stehe korrigiert, mein Entschuldigung;) – nhaa123