1

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

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

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

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

我希望能够从正则表达式中提取“年”、“月”和“日”。

4

1 回答 1

0

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

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

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

因此,关于您的评论,如果您可能有一个未命名的组,您最好遍历捕获的组并查看它是否有名称。

请注意,也许您可​​以使用正则表达式解析具有未命名组的案例,但我认为这不是一种通用方式。

例如,您可以在括号中使用上述正则表达式来捕获其中没有另一个捕获组的所有组([^()]*将确保):

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

对于另一种情况,您必须编写另一个。

于 2016-04-11T15:30:31.593 回答