C++ STL中的正则表达式

8
STL中是否有任何经过测试且无需额外编译器选项即可正常工作的本地库?我尝试使用<regex>,但编译器输出以下内容:

从/usr/include/c++/4.3/regex:40导入文件,来自main.cpp:5: /usr/include/c++/4.3/c++0x_warning.h:36:2: 错误:#error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.


5
为什么你不想在命令行中添加选项? - David Rodríguez - dribeas
3个回答

14

据我所知,G++ 4.3(以及后续版本)只是在考虑头文件的内容,以保证最大程度符合标准。

如果您正在使用C++98(已经存在一段时间的当前标准),则正则表达式支持在技术报告1中添加,头文件位于特殊的tr1目录中,内容位于特殊的命名空间std::tr1中。

在新的C++0x标准中,正则表达式支持已经合并到标准库中,因此可以在头文件regex和命名空间std中找到。

G++确保您根据在命令行上指定的--std=版本使用正确的版本,即使在内部它们都是相同的实现。

因此,为了使正则表达式正常工作而无需切换到--std=c++0x,只需要

#include <tr1/regex>

很好,这个可以(编译时没有警告或错误输出),但我应该如何编写模式本身呢?regex pattern("[^-]-[^-]");不起作用... :( 编译器说“未知”类型 - regex。 - Radek Simko
5
那是另一个问题,请单独提问。 - Jonathan Grynspan
太棒了!我可以使用C11! - Tebe

5

我非常确定正则表达式支持是在C++0x中添加的,因此在此之前没有任何STL支持它。如果您不想使用c++0x,可以使用Boost,但它不属于STL。


3
你可以尝试使用Boost.Regex代替c++0x头文件。
此外,STL与标准库不是同一件事。当SGI提供“标准模板库”时,它曾经代表着这个意思。标准库没有采用STL中的所有内容(绳索和slist),并且涵盖的范围比STL大得多(iostreams、所有tr1、tr2和c++0x头文件)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接