假设我想使用 C++11 正则表达式提取匹配花括号的内容。因此,例如,{foo}
将成功匹配,我可以使用match_result
来提取内容。看起来很简单,但是下面的代码并不完全符合我的要求
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 中对正则表达式的支持有多差。