preg match remove 在上一组中捕获

preg match remove captured in previous group

我需要将字符串拆分成多个部分。匹配的模式不得出现在其他匹配组中。示例字符串:

baranything
baranythingbaz

预期输出:

array(
    0 => baranything
    1 => bar
    2 => anything
    3 =>
)
array(
    0 => baranything
    1 => bar
    2 => anything
    3 => baz
)

最简单的解决方案可能类似于 (bar)(.*)(baz|),但它会将所有剩余的字符串放入 [2] 元素中,并且不会捕获 "baz"。

您可以使用

^(bar)(.*?)(baz|$)

参见regex demo and the regex graph

详情

  • ^ - 字符串的开头
    • (bar) - 第 1 组:bar
    • (.*?) - 第 2 组:除换行字符外的任何 0+ 个字符,尽可能少
    • (baz|$) - baz 或字符串结尾。