Ich brauche eine Hand auf den regulären Ausdruck immer korrekt mit dem folgenden Quellzeichenfolge zu arbeiten:std :: regex Suchen und Ersetzen
<path d="M 1434.9,982.0 L 1461.3,982.0 L 1461.3,1020.5 L 1434.9,1020.5 z " stroke-width="1" stroke="#008000" fill="none"/>
Auf einer solchen Linie, ich brauche die stroke-width
und stroke
Werte einzustellen, ohne Auswirkungen der Rest des Inhalts.
Bisher mache ich das in 2 Schritten, zuerst den stroke
Wert zu ersetzen und dann den stroke-width
Wert zu ersetzen, das ist, wo ich seltsame Ergebnisse bekomme, siehe unten.
Snippet:
string s("<path d=\"M 1434.9,982.0 L 1461.3,982.0 L 1461.3,1020.5 L 1434.9,1020.5 z \" stroke-width=\"1\" stroke=\"#008000\" fill=\"none\"/>");
std::regex re("stroke=\".+\" ");
cout << "0. " << s << endl;
s = std::regex_replace(s, re, "stroke=\"#00FF00\" ");
cout << "1. " << s << endl;
re = "stroke-width=\".+\" .*?";
s = std::regex_replace(s, re, "stroke-width=\"3\" ");
cout << "2. " << s << endl;
Ausgang:
0. <path d="M 1434.9,982.0 L 1461.3,982.0 L 1461.3,1020.5 L 1434.9,1020.5 z " stroke-width="1" stroke="#008000" fill="none"/>
1. <path d="M 1434.9,982.0 L 1461.3,982.0 L 1461.3,1020.5 L 1434.9,1020.5 z " stroke-width="1" stroke="#00FF00" fill="none"/>
2. <path d="M 1434.9,982.0 L 1461.3,982.0 L 1461.3,1020.5 L 1434.9,1020.5 z " stroke-width="3" fill="none"/>
Es ist fast, was außer ich bin auf der Suche, dass in der 2.
String ausgegeben, die stroke
Feld ist weg!
Ich benutze derzeit die std::regex
, aber ich bin offen für boost::regex
auch. Schätzen Sie alle Hinweise dazu.