boost正则表达式中的命名捕获/组列表

List of named captures / groups in boost regex

本文关键字:列表 正则表达式 boost      更新时间:2023-10-16

我想知道如何在boost中的正则表达式中获得捕获组的名称。

例如,如果用户输入一个字符串,该字符串应该是具有命名捕获组的有效正则表达式,那么如何在正则表达式中迭代定义的组列表并获得这些组的名称。boost是否提供了这样做的便利,或者我应该编写自己的解析器来提取这些名称?

例如,如果输入字符串为:

(?<year>[0-9]{4}).*(?<month>[0-9]{2}).*(?<day>[0-9]{2})

我希望能够从正则表达式中提取"年"、"月"answers"日"。

您可以使用以下正则表达式:

"?<([^<>]+)>"

我不认为正则表达式引擎能够在编译正则表达式之前为您提供捕获组的名称,因为它需要在解析(和编译)正则表达式之前遍历输入正则表达式一次,这不是一种最佳方法,除非它编译一次正则表达式并一起完成所有工作。

因此,关于你的评论,如果你可能有一个未命名的群组,你最好循环查看你捕获的群组,看看它是否有名字。

请注意,也许您可以用regex解析具有未命名组的情况,但我不认为这是一种通用的方法。

例如,您可以在括号中使用前面提到的regex来捕获所有没有其他捕获组的组([^()]*将确保):

`((?<([^<>]+)>)[^()]*)`

对于另一个案例,你必须写另一个。