C ++ RegEx重复捕获组

时间:2016-01-26 14:51:22

标签: c++ regex

我正在尝试解析格式

的字符串

{{name1 | filter1|filter2 |filter3}}加入(name1, filter1, filter2, filter3)

我有一个RegEx:

static const regex r("\\{\\{\\s*([\\.\\w]+)(\\s*\\|\\s*[\\.\\w]+)*\\s*\\}\\}");

我想找到所有出现的第二组,其中标有Kleene星(...)*。问题是我只能找到该组的最后一次出现。

相反,我使用以下RegEx:

static const regex r("\\{\\{\\s*([\\.\\w]+)((\\s*\\|\\s*[\\.\\w]+)*)\\s*\\}\\}");

找到第二个捕获组(整个子串" | filter1|filter2 |filter3")并用另一个RegEx解析它。

如何在C ++中完成?

最相似的问题是: Regex: Repeated capturing groups

1 个答案:

答案 0 :(得分:0)

你需要在" *"周围添加()表达意味着匹配第二组。

(\s*\|\s*[\.\w]+)*

这里,()组匹配1个实例:SP | SP WORD 即使" *"匹配零个或多个实例。 将其更改为:

((\s*\|\s*[\.\w]+)*)

或者,要清楚内部()不是标记的表达式:

((?n:\s*\|\s*[\.\w]+)*)