首页 > 解决方案 > preg match remove 在前一组中捕获

问题描述

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

baranything
baranythingbaz

预期输出:

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

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

标签: phppreg-match

解决方案


您可以使用

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

请参阅正则表达式演示正则表达式图

在此处输入图像描述

细节

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

推荐阅读