嘗試用 `std::regex` 從字串 20110604-092737<INFO :0xb7f2a6d0>: Player logout: ... 中提取前綴時間戳與日誌等級部分,但原寫法 "^[\\d\\-\\d\\<\\w\\s{0,1}\\:\\w>]" 編譯通過卻無法匹配,且在 VC2010 下報錯。
// 使用原始字串字面值 (C++11) 避免雙重轉義地獄
std::regex rgx(R"(^\d+-\d+<\w+\s?:\w+>)");
// 傳統寫法(雙重轉義)
std::regex rgx("^\\d+-\\d+<\\w+\\s?:\\w+>");
#include <regex>
#include <iostream>
#include <string>
int main() {
std::string log = "20110604-092737<INFO :0xb7f2a6d0>: Player logout: 忘了愛過誰";
std::regex rgx(R"(^\d+-\d+<\w+\s?:\w+>)"); // C++11 raw string
std::smatch m;
if (std::regex_search(log, m, rgx)) {
std::cout << "匹配成功: " << m.str() << '\n';
// 輸出: 20110604-092737<INFO :0xb7f2a6d0>
} else {
std::cout << "匹配失敗\n";
}
return 0;
}
boost::regex 或 re2。