【发布时间】:2016-07-21 10:24:45
【问题描述】:
我需要帮助正则表达式与以下源字符串一起正常工作:
<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 值,这是我得到奇怪结果的地方,见下文。
片段:
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 持开放态度。
感谢任何关于此的指针。
【问题讨论】: