【问题标题】:Options for using C++11 <regex> with a circa 2013 compiler在 2013 年左右的编译器中使用 C++11 <regex> 的选项
【发布时间】:2013-09-06 04:43:24
【问题描述】:

C++11 正则表达式是否有完整/正确的实现(现在)?

关于编译器支持与库支持的注意事项:

编译器支持 = 编译器可以识别为相关功能添加到语言中的任何新语法。利用添加到程序中的新功能的代码将被编译。

库支持 = 已更新库以实际实现该功能。添加到您的程序并链接到库的代码将起作用。

*编辑:我已使用新信息更新了此摘要并将其移至下面的答案中。

【问题讨论】:

  • 最近有很多工作要为 libstdc++ 添加&lt;regex&gt; 支持。至少部分正则表达式算法应该在 GCC 4.9 中可用。
  • 对于 MSVC,您有 msdn 页面,其中包含哪个版本的视觉 msdn.microsoft.com/en-us/library/bb982727%28v=vs.120%29.aspx 支持的语法
  • 现在 Clang 不应该完全兼容 C++11 吗? Clang status
  • @RedX Clang 编译器,是的。 libc++ 库,也可以。当然,在这两种情况下,都可能存在错误。但是,当您将 Clang 与不同的标准库一起使用时,您当然会受到该库支持的限制,因此如果您使用当前的 libstdc++,则没有正则表达式。
  • 有一个“regex.h”,它非常古老,基本上适用于所有东西。我正在使用 但意识到我的构建不是 C++11,所以我基本上切换到“regex.h”(稍微复杂一点)并且它起作用了。它也是 posix/windows。

标签: regex c++11


【解决方案1】:

根据堆栈交换政策,可以回答您自己的问题,我正在更新 带有新信息的问题摘要部分并将其移至此答案中。

GCC:在 GCC 4.9.0 之前不提供有效的 regex

Clang:编译正则表达式

标准库:

  • 自 GCC 4.9.0(GNU 的标准库)起,libstdc++ 才支持正则表达式
  • libc++(LLVM 的标准库)支持正则表达式
  • libc++ 在 Mac OS
  • 上完全验证
  • libc++ 可以从其他平台的源代码构建。
  • (我在 Linux 上构建并验证了一些正则表达式)

MSVC:正则表达式从 MSVC 2010 开始工作(根据@Laurent 的回答和相关的投票)

提升: C++11 正则表达式“基于”或“仿照”Boost。 我认为这意味着不完全相同。 如果有明确的差异列表,请通过链接发表评论。

【讨论】:

  • 这个列表会比我的回答更有见地,不用担心回答你自己的问题。 +1
  • 这个答案的 GCC/Clang 编译器部分实际上是无关紧要的,自 2011 年左右以来的任何版本的 GCC 或 Clang 都支持 &lt;regex&gt; 的所有必要语言功能,这只是它是否提供的问题与编译器一起使用的标准库。
【解决方案2】:

自 MSVC 2010 以来,我一直使用 &lt;regex&gt; 模块,它非常适合我的需要(使用来自 cplusplus.com 的文档)。

因此,如果您打算在 Windows 环境中进行开发,我建议您选择 MSVC 2010 或 2012。它开箱即用!

【讨论】:

    【解决方案3】:

    Clang 是完整的 C++11 功能。您可以在此处查看哪个版本中可用的功能:Clang C++11 features

    【讨论】:

    • 不要将编译器中的语言功能支持与库中的库功能支持混淆。
    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多