假設我想用C++ 11正則表達式提取匹配大括號的內容。因此,例如,{foo}
會匹配成功,我可以使用match_result
來提取內容。這看似簡單,但下面的代碼並不完全做什麼,我希望C++正則表達式匹配大括號內的內容
std::string foo("{foo}");
std::regex r("\\{(.*)\\}");
std::smatch m;
bool result = regex_match(foo, m, r); // result returns true
cout << m[0] << endl; // prints: {foo}
cout << m[1] << endl; // prints: {foo} instead of just foo as I would expect
現在不應該m[1]
回報只是foo
沒有括號因爲它是第一個捕獲組?
編輯:這個問題的一個重要信息是,我使用的編譯器是GCC 4.6.3(它目前是Ubuntu 12.04 LTS中的最新版本庫)。答案確切地說明了GCC對正則表達式的支持有多差。
注意,如果你是一個gcc的用戶,大多都的正則表達式的東西尚未實現。 – inf
編譯器/標準庫?大多數編譯器/標準庫,包括gcc/libstdC++還沒有完全實現正則表達式支持。 – Artyom