C 正则匹配卷曲括号内的内容

C++ regex match content inside curly braces

本文关键字:      更新时间:2023-10-16

假设我想使用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

相关文章:
  • 没有找到相关文章