【问题标题】:C++11 Regex Capture Groups By NameC++11 正则表达式按名称捕获组
【发布时间】:2013-06-02 20:28:22
【问题描述】:

我正在将基于 boost 的正则表达式转换为 C++11 正则表达式。我有一个名为 url 的捕获组:

\s*?=\s*?(("(?<url>.*?)")|('?<url>.*?)'))

使用 boost,如果您有 smatch,您可以调用 match.str("url") 按名称获取捕获组。使用std::smatch,我只能看到索引子匹配项。

如何使用 std::smatch 类访问 url 捕获?

【问题讨论】:

  • 你试过(?P&lt;url&gt;.*?)而不是(?&lt;url&gt;.*?)吗?
  • @HamZa 我不确定 C++11 正则表达式是否支持命名捕获组。我刚刚阅读了 Stroustrup 新的“C++ 编程语言”中专门针对该主题的整章,它甚至没有提到它。许多在线参考资料似乎并没有指明其他方向。
  • 根据这个answer,它似乎不支持命名组。

标签: regex c++11 capture-group


【解决方案1】:

您不能使用 c++11 标准命名捕获组。 C++11 正则表达式符合 ECMAScript 语法。这是一个可以解释这一切的链接http://www.cplusplus.com/reference/regex/ECMAScript/。尽管如果您考虑一下这可能会令人失望,但真正的正则表达式将不支持这一点,但它是额外的。

【讨论】:

  • 您能发布一个提取嵌套组的示例吗?也许匹配可以在管道的任一侧?
  • 我基本上想看看如何根据我发布的示例有效地提取我的 url,更新为不依赖命名的捕获组。
  • 这让我很难过!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 2013-10-06
  • 2019-03-17
  • 2011-03-03
  • 1970-01-01
  • 2019-10-05
  • 2018-03-11
相关资源
最近更新 更多