1

我需要从字符串中删除 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标签?

4

2 回答 2

2

疯狂猜测:.与 EOL 字符不匹配。

您可以使用:"<[.\n]*?>"匹配任意数量的换行符。

于 2012-01-17T07:43:13.307 回答
0

检查模式:<[^>]*>

示例代码:

#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;
}

输出:

Found: <td cl<asas> 4 12
Found: </td> 31 5
Found: <td class="played"> 36 19
于 2015-10-28T15:06:26.850 回答