C++11正则表达式的按名称捕获组

21

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


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

使用boost库,如果您有一个smatch对象,可以通过调用match.str("url")方法按名称获取捕获组。但是使用std::smatch类时,我只能看到索引子匹配。

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


你尝试过使用 (?P<url>.*?) 而不是 (?<url>.*?) 吗? - HamZa
@HamZa 我不确定C++11正则表达式是否支持命名捕获组。我刚刚阅读了Stroustrup的新书《C++程序设计语言》专门介绍这个主题的整个章节,它甚至没有提到它。而且许多在线参考资料似乎也没有指出其他情况。 - Travis Parks
根据这个答案,似乎它不支持命名组。 - HamZa
1个回答

18

在C++11标准中,您无法为捕获组命名。 C++11 regex符合ECMAScript语法。这里是一个链接,解释了所有内容 http://www.cplusplus.com/reference/regex/ECMAScript/。虽然这可能令人失望,但如果考虑到真正的正则表达式不支持这一点,它就是额外的。


你能否提供一个提取嵌套组的示例?也许匹配可以在管道的任一侧进行? - Travis Parks
我基本上想看看如何高效地提取我的URL,基于我发布的示例进行更新,而不依赖于命名捕获组。 - Travis Parks
2
这让我感到悲伤! - Dilawar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接