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

时间:2016-04-11 15:26:38

标签: c++ regex boost named capture-group

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

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

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

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

我希望能够提取&#34;年&#34;,&#34;月&#34;和&#34; day&#34;走出正则表达式。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

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

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