C++ RegEx重复捕获组

C++ RegEx repeated capturing groups

本文关键字:RegEx C++      更新时间:2023-10-16

我正在尝试解析形式的字符串

{{name1 | filter1|filter2 |filter3}}(name1, filter1, filter2, filter3).

我有一个正则表达式:

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

我想找到第二组的所有出现,它用克莱恩星标记(...*.问题是我只能找到该组的最后一次出现。

相反,我使用以下正则表达式:

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

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

如何在C++中做到这一点?

最相似的问题在这里:正则表达式:重复捕获组

您需要在"*"表达式周围添加 (),以匹配第二组。

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

此处,() 组匹配以下 SP |SP 字即使"*"匹配零个或多个实例。将其更改为:

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

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

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