私は、次のソース文字列で正常に動作する正規表現式を得ることに手を必要とする:のstd ::正規表現の検索と置換が
<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"/>
なラインで、私が影響を与えることなくstroke-width
とstroke
値を調整する必要があります残りのコンテンツ
これまではstroke
の値を置き換えてstroke-width
の値を置き換えて2段階に分けていますが、これは私が奇妙な結果を得る場所です。
スニペット:
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;
が出力:
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"/>
それは私が2.
文字列出力のことを除いて探していますほとんど何、stroke
フィールドが消えました!
私は現在std::regex
を使用していますが、boost::regex
も公開しています。 これに関する任意のポインタを気に入ってください。