简单逻辑如下, 欢迎大家挑毛病:
#include <iostream>
using namespace std;
#define TAG_BEGIN "<p class=\"img-desc\">"
#define TAG_END "</p>"
void filterHtmlTag(string &strHtml)
{
unsigned int leftTagLen = string(TAG_BEGIN).size();
unsigned int rightTagLen = string(TAG_END).size();
while(1)
{
unsigned int pos1 = strHtml.find(TAG_BEGIN);
if(pos1 == string::npos)
{
return;
}
unsigned int pos2 = strHtml.find(TAG_END, pos1 + leftTagLen);
if(pos2 == string::npos)
{
return;
}
strHtml.erase(pos1, pos2 - pos1 + rightTagLen);
}
}
int main()
{
{
string s = "xxx<p class=\"img-desc\">hello world</p>yyyy";
filterHtmlTag(s);
cout << s.c_str() << endl;
}
{
string s = "xxx<p class=\"img-desc\"></p>yyyy";
filterHtmlTag(s);
cout << s.c_str() << endl;
}
{
string s = "<p class=\"img-desc\"></p>yyyy";
filterHtmlTag(s);
cout << s.c_str() << endl;
}
{
string s = "xxx<p class=\"img-desc\"></p>";
filterHtmlTag(s);
cout << s.c_str() << endl;
}
{
string s = "<p class=\"img-desc\"></p>";
filterHtmlTag(s);
cout << s.c_str() << endl;
}
{
string s = "<p class=\"img-desc\">x</p>";
filterHtmlTag(s);
cout << s.c_str() << endl;
}
{
string s = "xxx<p class=\"img-desc\">hello world</p>yyyy,xxx<p class=\"img-desc\">hello world</p>yyyy,xxx<p class=\"img-desc\">hello world</p>yyyy,";
filterHtmlTag(s);
cout << s.c_str() << endl;
}
{
string s = "xxx<p class=\"img-desc\"></p>yyyy,xxx<p class=\"img-desc\">hello world</p>yyyy,xxx<p class=\"img-desc\">hello world</p>yyyy,";
filterHtmlTag(s);
cout << s.c_str() << endl;
}
{
string s = "xxx<p class=\"img-desc\"></p>yyyy,xxx<p class=\"img-desc\">hello world</p>yyyy,xxx<p class=\"img-desc\">hello world</p>yyyy,";
filterHtmlTag(s);
cout << s.c_str() << endl;
}
return 0;
}
OK, 不多说, 睡觉。