C ++ regex_replace问题

时间:2014-05-11 04:48:09

标签: c++ regex std

为什么此代码不能取代' Mozilla / 5.0'到我的用户代理'?

Regex在Notepad ++中运行良好,但在我的控制台应用程序中无效。

#include <regex>
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    string header = 
"GET / HTTP/1.1\r\n\
Host: com.com\r\n\
User-Agent: Mozilla/5.0\r\n\
Connection: keep-alive";

    tr1::regex rx("^(User-Agent:).+$", regex_constants::icase);
    header = regex_replace(header, rx, "$1 My User Agent", regex_constants::format_first_only);

    return 0;
}

1 个答案:

答案 0 :(得分:5)

问题在于^表示字符串的开头,而不是的开头。 您可以使用以下正则表达式,它可以正常工作:

((?:^|\r\n)User-Agent:).+(?=$|\r\n)

Regular expression visualization