如何使正则表达式移动到下一个匹配项?

How can I make a regular expression move to the next match?

我正在尝试使用正则表达式在以下模式的文本中查找匹配项:

(500,0,'ABC',4),(550,0,'ABC',0),(450,0,'D\'E,F',0),(650,0,'G_HI',0);

我想要的是第一个数字字符串,但是只有第二和第四个位置(总是数字)都是零。在这个例子中,这将导致这些匹配:

550    ABC
450    D\'E,F
650    G_HI

我想出的正则表达式是 \((\d+),0,'(\S+?)',0,但是当它找到 4) 时,它会继续消耗文本,直到它到达第一个 0)。我希望它跳过这场比赛,然后尝试下一场。

这可以用正则表达式实现吗?

我正在使用 C++14 std::regex,据我所知,它对多种方言都有很好的支持。

尝试将正则表达式从 \((\d+),0,'(\S+?)',0 更改为 \((\d+),0,'(([^']|\')+)',0。这允许字符串包含非 ' 字符或字符串 \' 的任意组合。它符合您的要求。

Regex101 Demo