【问题标题】:boost::regex vs std::regex - can't find empty() method?boost::regex vs std::regex - 找不到 empty() 方法?
【发布时间】:2011-12-09 15:01:43
【问题描述】:

boost::regex 替换为std::regex 因为我们在公司中使用gcc 4.6 我遇到了该类的empty () 方法的问题-它基本上没有从boost::regexstd::regex 类.我不确定这是 gcc 的问题还是这个方法根本没有成为 C++11 标准,但是那段代码在很大程度上取决于这个特性。所以问题是 - 在 C++11 std::regex 中是否有办法检查表达式是否已设置,或者我应该在余生中坚持使用 boost::regex

【问题讨论】:

  • @PlasmaHH:真的吗?我以为是。它在 MSVC 中,维基百科在这里也提到了它 - en.wikipedia.org/wiki/C%2B%2B11#Regular_expressions 所以它最终没有在最后一分钟成为标准?
  • @VladLazarenko 我正在查看 N3290,但找不到。
  • @pmr: ...但它是在 TR1 中.. 你知道到底发生了什么吗?
  • "或者我应该在我的余生中坚持使用 boost::regex?" ... 如果 empty() 的使用没有完全散布在您的项目中,您也许可以使用它很容易地重构代码以使用正则表达式和boost::optional(或此功能的某些变体)的组合
  • @Martin:我也是这么想的。但是我真的不想为了重构而重构。替换是一回事,但无缘无故花时间重构是另一回事:)

标签: c++ regex boost c++11 std


【解决方案1】:

empty() 很久以前就从std::regex 中删除了。 N1507 (2003-09-16) 是建议删除它的原始论文(搜索“什么是无效/空的正则表达式?”)。这个问题是针对当时的std::tr1:regex。它在 LWG tr1 问题列表中记录为问题 7.28,并包含以下解决方案:

在科纳讨论过。 LWG 同意默认构造函数应该 相当于从空字符串构造。保持打开状态 现在部分是因为我们需要表达这一点的措辞,部分是因为 因为尚不清楚使用 theempty() 是否有任何意义 首先是成员函数。

N1711 (2004-11-04) 是第一个缺少 basic_regex::empty() 的 TR1 草案。从那里它被从 TR1 导入到 C++11 中,没有进一步讨论。

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 2012-11-11
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    相关资源
    最近更新 更多