如何匹配 2 个分隔符之间的多个匹配项?

How can I match multiple hits between 2 delimiters?

嗨,RegEx 的同胞们 ;)

我正在尝试匹配每两个引号之间的多个文本 这是我的文字:

...random code
someArray[] =         ["Come and",
                       "get me,",
                       "or fail",
                       "trying!",
                       "Yours truly"]
random code...

到目前为止,我成功地用 两个 模式获得了正确的匹配,一个接一个地执行:

(?s)someArray\[\].*?=.*?\[(.*?)\]

这会提取两个括号之间的文本,在结果中,我使用这个:

"(.*?)"

这工作得很好,但我很想在一个正则表达式中获取文本。

非常感谢任何帮助!

考虑使用 \G。在它的帮助下,您可以匹配 "(.*?)" 之前的 someArray[] = ["(.*?)" 的先前匹配(严格来说,是整个正则表达式的先前匹配)。然后从所有匹配中获取第一个捕获组:

(?:(?s).*someArray\[\].*?=.*?\[|\G[^"\]]+)"(.*?)"

演示:https://regex101.com/r/eBQWdU/3

如何从中获取第一个捕获组取决于您使用正则表达式的语言。例如在 PHP 中,您可以这样做:

preg_match_all('/(?:(?s).*someArray\[\].*?=.*?\[|\G[^"\]]+)"(.*?)"/', $input, $matches);
$array_items = $matches[1];

演示:https://ideone.com/mZgU1x