我正在尝试解析格式
的字符串 {{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
答案 0 :(得分:0)
你需要在" *"周围添加()表达意味着匹配第二组。
(\s*\|\s*[\.\w]+)*
这里,()组匹配1个实例:SP | SP WORD 即使" *"匹配零个或多个实例。 将其更改为:
((\s*\|\s*[\.\w]+)*)
或者,要清楚内部()不是标记的表达式:
((?n:\s*\|\s*[\.\w]+)*)