2014-05-11 27 views
0

爲什麼這段代碼不能替代'我的用戶代理'的'Mozilla/5.0'?C++ regex_replace問題

正則表達式在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; 
} 
+0

您正在使用什麼編譯器?正則表達式C++ 11直到最近纔得到完全支持。這可能是因爲記事本++使用的是與您的控制檯不同的編譯器(這是萬一您沒有收到編譯錯誤) – vsoftco

+0

我使用VS 2012. 平臺工具集:Visual Studio 2012(v110) – Khachatur

+0

您是否收到錯誤用VS編譯?或沒有任何反應? – vsoftco

回答

5

的問題是,^意味着的開始,而不是開始的。 您可以使用下面的正則表達式,它工作得很好:

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

Regular expression visualization

+0

謝謝,這工作! – Khachatur