如何匹配 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];
嗨,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];