如何在正则表达式上找到最小的匹配?

时间:2017-07-07 04:21:29

标签: php regex

说我有字符串“foo1barfoo2foo3bar”

捕获foo1bar,foo2,foo3bar的正则表达式是什么? 每个foo之间的文本(在这种情况下为1 2 3)实际上是可变长度。

我遇到的问题是我现在的正则表达式会捕获foo1bar和foo2foo3bar

当我添加一个非贪婪的量词时,它只捕获foo1 foo2 foo3

使用php btw

1 个答案:

答案 0 :(得分:0)

您可以使用负向前瞻匹配,直到下一个“foo”:

preg_match_all("/foo((?!foo).)*/s", "foo1barfoo2foo3bar", $result);

$result[0]将是一个包含三个匹配项的数组(请注意额外的[0])。

["foo1bar", "foo2", "foo3bar"]

仅当您想要捕获换行符时才需要s修饰符。