正则表达式:boost :: xpressive vs boost :: regex

orl*_*rlp 13 c++ regex boost boost-xpressive

我想在C++中做一些正则表达式,所以我查看了interwebz(是的,我是C++的初学者/中级)并找到了这个SO答案.

我真的不知道在boost :: regex和boost :: xpressive之间做什么选择.有哪些优点/缺点?

我还读到与boost :: regex相对的boost :: xpressive是一个只有头的库.是不是很难在Linux和Windows上静态编译boost :: regex(我几乎总是编写跨平台应用程序)?

我也对编译时间的比较感兴趣.我有一个使用boost :: xpressive的当前实现,我对编译时间不太满意(但我没有与boost :: regex进行比较).

当然,我也对正则表达式实现的其他建议持开放态度.要求是免费的(如在啤酒中)并与http://nclabs.org/license.php兼容.

Kit*_*YMG 2

那么,如果您需要在运行时创建正则表达式(即让用户输入正则表达式进行搜索),则不能使用,xpressive因为它只是编译时。

另一方面,由于它是一个编译时构造,因此它应该比优化器受益更多regex

我用 Boost.MPL、StateChart 和 Spirit 做了足够多的事情,220KB 的编译器警告和错误并没有真正让我烦恼。如果这对您来说听起来很糟糕,请坚持使用 Boost.Regex。

如果您确实使用 xpressive,我强烈建议打开,-Wfatal-errors因为这将在第一个“error:”行之后停止编译(以及进一步的错误)。

对于编译时间来说,这不是竞争。Boost.Regex 会更快*。xpressive 使用 MPL 的事实将导致编译时间显着增加。

*这假设您只构建 dll/so 一次

  • 这并不完全正确。Xpressive 也支持运行时正则表达式,请参见此处:http://www.boost.org/doc/libs/1_46_1/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.creating_a_regex_object.dynamic_regexes (12认同)
  • 它只是一个标头库。请参阅安装说明:http://www.boost.org/doc/libs/1_46_1/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.installing_xpressive 我没有遇到编译时间问题。我改用 Boost.Regex 的原因是 ICU 的支持。 (2认同)