boost正则表达式中的命名捕获/组列表
List of named captures / groups in boost regex
我想知道如何在boost中的正则表达式中获得捕获组的名称。
例如,如果用户输入一个字符串,该字符串应该是具有命名捕获组的有效正则表达式,那么如何在正则表达式中迭代定义的组列表并获得这些组的名称。boost是否提供了这样做的便利,或者我应该编写自己的解析器来提取这些名称?
例如,如果输入字符串为:
(?<year>[0-9]{4}).*(?<month>[0-9]{2}).*(?<day>[0-9]{2})
我希望能够从正则表达式中提取"年"、"月"answers"日"。
您可以使用以下正则表达式:
"?<([^<>]+)>"
我不认为正则表达式引擎能够在编译正则表达式之前为您提供捕获组的名称,因为它需要在解析(和编译)正则表达式之前遍历输入正则表达式一次,这不是一种最佳方法,除非它编译一次正则表达式并一起完成所有工作。
因此,关于你的评论,如果你可能有一个未命名的群组,你最好循环查看你捕获的群组,看看它是否有名字。
请注意,也许您可以用regex解析具有未命名组的情况,但我不认为这是一种通用的方法。
例如,您可以在括号中使用前面提到的regex来捕获所有没有其他捕获组的组([^()]*
将确保):
`((?<([^<>]+)>)[^()]*)`
对于另一个案例,你必须写另一个。
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 组合正则表达式部分使用 | 不起作用的 C++
- 为什么C++正则表达式这么慢?
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- 在C++中实现正则表达式
- C++正则表达式替换整个单词
- 使用 STD 正则表达式标记逗号分隔的列表
- Makefile中扩展正则表达式列表的分隔符
- boost正则表达式中的命名捕获/组列表
- 使用这个正则表达式,为什么它只捕获最后一个列表项?
- 如何从正则表达式模式列表中找到最具体的匹配项