C 正则匹配卷曲括号内的内容
C++ regex match content inside curly braces
假设我想使用C 11 Regex提取匹配卷曲括号的内容。因此,例如,{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中对正则支持的差。
您的模式正确。您的代码在很大程度上是正确的,很少有" std"在此处和那里(用于" cout"," endl"和regex_match),或者至少不一致(假设您是"使用'使用名称空间std')。
此外,在Visual Studio 2012上,您的代码输出预期结果。我没有尝试2010年,但我怀疑它也在那里运行(Microsoft Informated TR1在2010年)。
我怀疑您正在使用GCC。正如@Artyom指出的那样,在GCC/LibstDC 中未实现。它可以很好地编译,没有任何警告,但给出了错误的结果。尽管人们普遍认为在每个领域的海湾合作委员会都比微软优越,但正式表达方式并非如此。
在此处查找GCC上的正则状态:http://gcc.gnu.org/onlinedocs/libstdc /manual/status.html#status.iso.200x
相关文章:
- 没有找到相关文章