使用std :: regex在这个正则表达式中我的错误是什么

时间:2012-11-22 00:36:33

标签: c++ regex c++11

我正在使用gcc 4.6.3和-std = c ++ 0x

这是我第一次使用std :: regex。而且我看不出我的错误:

  • 输入解析的std :: string以GET /favicon.ico HTTP/1.1开头,而我的正则表达式模式为GET(.*)
  • 结果组1评估为T /favicon.ico HTTP/1.1 而我期待更像/favicon.ico HTTP/1.1
  • 的东西

我不明白为什么要保留T

这是我的代码:

static const std::string strRegExp="GET(.*)";
std::string computeRequestedItem(const std::string& strHttpRequest)
{
    std::cout << "SEARCHING :" << strRegExp << "in :" << strHttpRequest;
    std::string strResult;
    std::match_results<std::string::const_iterator> result;
    static const std::regex pattern(strRegExp); 
    bool bValid = std::regex_match(strHttpRequest, result, pattern);

    if(!bValid)
    {
        std::cout << "error" << std::endl;
        return strResult;   
    }

    strResult = result[1];

std::cout << "Requested item: " << strResult << std::endl;

    return strResult;
}

这是输出:

SEARCHING :GET(.*)in :GET /favicon.ico HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/536.11 (KHTML, like Gecko) Ubuntu/12.04 Chromium/20.0.1132.47 Chrome/20.0.1132.47 Safari/536.11
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

-+-+-+-+-+-+-+-+-+-+-+-+-+ 
Requested item: T /favicon.ico HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/536.11 (KHTML, like Gecko) Ubuntu/12.04 Chromium/20.0.1132.47 Chrome/20.0.1132.47 Safari/536.11
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

1 个答案:

答案 0 :(得分:4)

libstdc ++正则表达式支持只是部分的。请see here并阅读28 Regular Expression。我相信你的代码应该可以正常工作。作为测试,我将std更改为boost并使用boost :: regex编译代码并获得以下结果:

  

请求项目:/favicon.ico HTTP / 1.1

我建议使用boost::regex,直到完全支持libstdc ++ regex。

相关问题