C ++中易于使用的正则表达式支持?

29
我正在寻找一个强大、易于使用的,用于本地C++的正则表达式求值器,可以是跨平台的或仅限于Windows。
要求:
  • 不能使用Boost或ACE正则表达式库(可惜)
  • 不能使用.NET Regex(或任何受管理的代码)
主要要求是它应该是独立的和开放的。

只是好奇 - 为什么不能使用boost? - svec
@svec 因为源代码是用于分发的,许多使用它的人没有Boost,不能或不想下载和构建Boost。但是一些库已计划包含在内,这很好。本应该在5年前发生,但嘿,无论如何。 - user2189331
1
但是客户端不必安装boost。只需静态链接boost,就不会有问题。(而且无论如何,您都应该始终静态链接boost,因为即使客户端已经安装了它,他们可能没有相同的版本,或者使用相同的选项进行编译。) - James Kanze
@JamesKanze 这是源代码依赖项,因为我们正在分发源代码,而不是构建的库。如果由我决定,每个主要的 C++ 编译器和 IDE 都会与 Boost 一起发布。在 2008 年提出这个问题时,情况远非如此。很难让人们使用 STL 更不用说 Boost 了。 - user2189331
@JamesDevlin 我不确定是否要使用Boost进行编程;Boost并非万能药,我会根据具体情况选择是否使用它。实际上,由于我现在可以使用C++11,我已经完全不使用Boost了。以前我使用它的主要原因是正则表达式。 - James Kanze
10个回答

13

链接http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport指向的页面未找到。 - Yaroslav Voytovych

12

尝试使用libpcre

如果你在使用Windows系统,他们有一个可以工作的Windows端口。我知道e-texteditor使用它,所以至少能证明它是可行的:-)


10
如果您使用Visual Studio,可以使用Visual C++ 2008 Feature Pack Release,它实现了TR1的一些功能,并包括正则表达式解析。 下载链接

10

7
GNU C库支持正则表达式。它是开放的,RE代码似乎很容易提取。

6
我赞同推荐PCRE。我在Windows的C++项目中使用过它,效果很好。它是免费的,即使用于构建商业软件也是如此。它还实现了一个事实上的标准正则表达式语言,这对你的用户来说将是受欢迎的。当然,PCRE是与Perl兼容的,Python也使用相同的库。
原生的PCRE接口有些麻烦,非常C风格,因此编写一个漂亮的C++包装器可能值得一试。很可能已经有人做过这样的包装器,但我不熟悉任何一个。

5
GNU C库正则表达式功能(regcomp(),regexec()和相关函数)存在问题。请改用libetre;函数签名与glibc提供的签名相匹配。 http://laurikari.net/tre/

4

3

为什么你不使用微软ATL的正则表达式库?Kenny Kerr最近写了一篇简短文章

ATL包括一个轻量级的正则表达式实现。尽管最初是Visual C++的一部分,但现在已包含在ATL Server下载中。

CAtlRegExp类模板实现了解析器和匹配引擎。...

正则表达式语法在atlrx.h头文件顶部定义。


2
免费的CodePlex中的ATL Server库和工具包含一个正则表达式解析器。请参见CodePlex存档中的AtlServer
ATL Server是一个C++类库,允许开发人员构建服务型C++应用程序和Web服务的客户端和服务器部分。它提供了构建大型互联网站所需的许多功能,例如SOAP消息传递、缓存设施、线程设施、正则表达式处理、会话状态管理、性能监视、MIME支持、与IIS的集成以及与安全和加密基础设施交互的类。早期版本的库是Visual Studio 2002、Visual Studio 2003和Visual Studio 2005的一部分。该项目始于作为Visual Studio 2005 SP1的一部分发布的库的版本。

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