1

可能重复:
与 c++11 正则表达式不匹配

我正在阅读这本涵盖 C++11 的书,然后我读到了关于正则表达式的章节。一切对我来说都很好,直到我得到关于分组的部分,并在我需要返回一个组时引用 \1。我的代码编译得很好:

#include <iostream>
#include <regex>
#include <string>
int main()
{
     try
     {


           regex r1("<(.*)>.*</\\1>");
           bool found = regex_match(string("<tag>value</tag>"),r1);
           cout << "Does the string match:        ";
           cout << boolalpha << found << '\n';
     }catch( exception e)
     {
        cout << e.what() << '\n';
     }

     return 0;
}

然而,会发生什么是我收到分段错误(核心转储)消息。这个小片段是直接从书中使用的,所以我非常怀疑这是错误的。注意:我确实使用 -std=c++0x 进行编译。注意:我在 Ubuntu 12.04 下使用 Code::Blocks

任何帮助将不胜感激!谢谢!

4

1 回答 1

3

libstdc++ 的正则表达式的实现非常不完整。

http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011

前往第 28 节,正则表达式。如果您使用的是 libstdc++(在 ubuntu 上几乎可以肯定),那么您还不能使用正则表达式。

很遗憾,因为 g++ 的 C++11 工具链在其他方面非常可靠。

您可能需要为此使用 boost 或其他正则表达式库。或者切换 clang(和 clang 的库)或 MSVC(和他们的库)。

于 2012-11-01T01:12:06.053 回答