我需要从字符串中删除HTML标记:
std::String whole_file("<imgxyz width=139\nheight=82 id=\"_x0000_i1034\" \n src=\"cid:image001.jpg@01CB8C98.EA83E0A0\" \nalign=baseline border=0> \ndfdsf");
当我使用RE2库进行模式删除时
RE2::GlobalReplace(&whole_file,"<.*?>"," ");
当我使用
时,不删除Html标签RE2::GlobalReplace(&whole_file,"<.*\n.*\n.*?>"," ");
html标签被移除,为什么会这样..任何人都可以建议一个更好的正则表达式来从文件中删除HTML标签吗?
答案 0 :(得分:2)
狂野猜测:.
与EOL字符不匹配。
您可以使用:"<[.\n]*?>"
来匹配任意数量的换行符。
答案 1 :(得分:0)
检查模式:<div id="demo"></div>
示例代码:
<[^>]*>
输出:
#include <string.h>
#include <string>
#include <stdio.h>
#include <vector>
#include <regex>
int main()
{
//Find all html codes
std::regex htmlCodes("<[^>]*>");
std::cmatch matches;
const char* nativeString = "asas<td cl<asas> ass=\"played\">0</td><td class=\"played\">";
int offset = 0;
while(std::regex_search ( nativeString + offset, matches, htmlCodes ))
{
if(matches.size() < 1)
{
break;
}
for (unsigned i=0; i<matches.size(); ++i)
{
const int position = matches.position(i) + offset;
printf("Found: %s %d %ld\n",matches[i].str().c_str(),position,matches.length(i));
offset = position + matches.length(i);
}
}
return 0;
}