我正在开发一个在基于linux的系统上运行的商业(非开源)C++项目.我需要在C++代码中做一些正则表达式.(我知道:我现在有2个问题.)
问题:经常从C/C++开始使用正则表达式的人建议我查看哪些库?快速搜索引起了我的注意:
1)Boost.Regex(我需要阅读Boost软件许可证,但这个问题与软件许可证无关)
2)C(不是C++)POSIX正则表达式(#include
3)http://freshmeat.net/projects/cpp_regex/ (我对此一无所知;似乎是GPL,因此无法在此项目中使用)
Boost.Regex非常好,并且有望成为C++ 0x标准的一部分(它已经在TR1中).
就个人而言,我发现Boost.Xpressive更适合使用.它是一个只有头的库,它有一些很好的功能,如静态正则表达式(在编译时编译的正则表达式).
更新:如果您使用的是兼容C++ 11的编译器(gcc 4.8不是!),请使用std :: regex,除非您有充分的理由使用其他内容.
感谢所有的建议.
我今天尝试了一些东西,并且考虑到我们尝试做的事情,我选择了最简单的解决方案,我不必下载任何其他第三方库.最后,我#include
在过去的C++项目中,我使用PCRE取得了很好的成功.它非常完整且经过充分测试,因为它被用于许多高端项目中.而且我发现Google最近也为PCRE贡献了一套C++包装器.
自TR1以来,C++有一个内置的正则表达式库.AFAIK Boost的正则表达式库与它非常兼容,如果您的标准库不提供TR1,它可以用作替代品.
还有两个选择:
如果你可以用c ++编写它11 - 做教程:http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c15339
注意:在编写本文时,我所知道的唯一的c ++ 11正则表达式库是clang/llvm库,并且仅适用于Mac.GNU仍然没有实现正则表达式.我不了解Visual Studio.大多数人仍然使用boost regex实现.
或者您可以使用ragel生成有限状态机来为您进行解析,并生成C/C++代码实现:http://www.complang.org/ragel/
我用了一点来生成解析json的代码.这个ragel文件:https://github.com/matiu2/yajp/blob/master/parser/number.rl 用于生成此代码 https://github.com/matiu2/yajp/blob/master/parser/json .hpp#L254 和这个有限状态机图:
更新1:
lvm的libc ++ regex适用于ubuntu 14.04:libc ++ - dev - LLVM C++标准库(开发文件).编译时:clang++ -std=c++11 -lc++ -I/usr/include/c++/v1 ...
更新2:
我目前正在享受提升精神3 - 我比正则表达更喜欢它,因为它具有BNF风格规则并且经过深思熟虑.(旧的(记录更多)Spirit Qi libs 在这里找到)
Boost有正则表达式.
这应该填补这个法案
您还可以查看Yandex搜索引擎开发的快速正则表达式库,以便针对大量数据快速匹配数千种模式.
我个人总是使用boost.regex(虽然我不太需要C++中的正则表达式).Microsoft Labs也有一个名为GRETA的正则表达式库:http://research.microsoft.com/projects/greta/.显然它非常快,并且具有完整的Perl 5语法.我没有用它,但你可能想测试一下.