適用所有常用的warnings about parsing HTML with regexes。
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main()
{
boost::regex double_br("<br/?>[ \\r\\n\\s]*<br/?>", boost::regex::icase);
boost::regex fonts("</?font[^>]*>", boost::regex::icase);
std::string cases[] = {
"foo<br><br>bar",
"one<br/><br>two",
"a<br> <br/>b",
"a<br><br>c<br/><br/>d",
"<font attr=\"value\">w00t!</font>",
"<font attr=\"value\">hello</font><font>bye</font>",
""
};
for (std::string *s = cases; *s != ""; ++s) {
std::cout << *s << ":\n";
std::string result;
result = boost::regex_replace(*s, double_br, "</p><p>");
result = boost::regex_replace(result, fonts, "");
std::cout << " - [" << result << "]\n";
}
return 0;
}
輸出:
foo<br><br>bar:
- [foo</p><p>bar]
one<br/><br>two:
- [one</p><p>two]
a<br> <br/>b:
- [a</p><p>b]
a<br><br>c<br/><br/>d:
- [a</p><p>c</p><p>d]
<font attr="value">w00t!</font>:
- [w00t!]
<font attr="value">hello</font><font>bye</font>:
- [hellobye]
嗯,你嘗試了嗎?你得到什麼錯誤/問題? – Mat
這些正則表達式可以正常工作,但是您需要將您的正則表達式轉義字符加倍轉義(例如,\ r應該是\\ r),因爲\也恰好是C++中的字符串轉義字符。 – Benj
我使用了雙轉義字符並試過,但它並沒有取代任何東西... – luyi0619