удалить теги html из строки с помощью библиотеки регулярных выражений RE2

Мне нужно удалить теги HTML из строки:

std::String whole_file("<imgxyz width=139\nheight=82 id=\"_x0000_i1034\" \n src=\"cid:[email protected]\" \nalign=baseline border=0> \ndfdsf");

Когда я использую библиотеку RE2 для удаления шаблона

RE2::GlobalReplace(&whole_file,"<.*?>"," ");

Теги Html не удаляются, когда я использую

RE2::GlobalReplace(&whole_file,"<.*\n.*\n.*?>"," ");

HTML-теги удалены, почему это так ... может ли кто-нибудь предложить лучшее регулярное выражение для удаления HTML-тегов из файла?


person Global Warrior    schedule 17.01.2012    source источник


Ответы (2)


Дикая догадка: . не соответствует символу EOL.

Вы можете использовать: "<[.\n]*?>" для соответствия любому количеству символов новой строки.

person Matthieu M.    schedule 17.01.2012
comment
Спасибо, проблема решена, поигрался с кодом RE2 и сделал ошибку, шаблон ‹.*?› достаточен для совпадения. - person Global Warrior; 17.01.2012
comment
RE2::GlobalReplace(&whole_file,‹(.|\n)*?›,); - person Global Warrior; 17.01.2012
comment
Вы также можете попытаться избежать возврата, превратив его в <[^>]+> - person Matthieu M.; 17.01.2012
comment
Библиотека RE2 лишена обратного отслеживания, в этом вся цель ее использования :) - person Global Warrior; 17.01.2012
comment
@Piyush: ах, спасибо, что сообщили мне :) Думаю, тогда оно автоматически оптимизировало ваше регулярное выражение. - person Matthieu M.; 17.01.2012

Шаблон проверки: <[^>]*>

Образец кода:

#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
person Dawid Drozd    schedule 28.10.2015