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

时间:2017-06-08 07:19:12

标签: regex pcre

嗨,我的RegEx'ers同事;)

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

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

到目前为止,我设法通过两个模式获得了正确的匹配,并在彼此之后执行:

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

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

"(.*?)"

这工作得很好,但我希望将文本放在一个正则表达式中。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

考虑使用\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