我错了还是这是一个Visual Studio 2013正则表达式错误?

时间:2014-12-29 13:43:13

标签: c++ regex visual-c++ c++11 gcc

我有一个正则表达式,用于从HTML页面中删除额外的vml标记。

    std::string regstr = R"(<!\[if !vml\]>([\s\S]*?)<!\[endif\]>)";
    std::regex regex(regstr, std::regex_constants::ECMAScript);
    std::smatch mr;
    std::string str = R"(</v:shape><![endif]--><![if !vml]>
<img width=234 height=383 src="file:///C:\Users\jcyangzh\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png" v:shapes="110x110">
<![endif]></span></span><span lang=EN-US><o:p></o:p></span></p>)";
    if (std::regex_search(str, mr, regex)) {
        std::cout << "match found: " << mr.size() << "\n";
        for (size_t i = 0; i < mr.size(); ++i) {
            std::string strrep = mr.str(i);
            std::cout << "index: " << i << "\n string: " << strrep << "\n\n";
        }
    }

对于GNU GCC编译器4.9.2(最新的tdm-gcc Windows端口),上面的代码可以正常工作。我使用的正则表达式匹配。

gcc_regex_match_result

但是对于Visual Studio 2013 Update 4,正则表达式不起作用,std::regex_search返回false

如果我将关键模式[\s\S]替换为(\s|\S),则会有 3 匹配。

vc_2013_update4_regex_match_result

[\s\S]是有效的C ++ 11 Ecma正则表达式,还是这是VS2013 Update 4的错误?

0 个答案:

没有答案