PHP - Preg_match最短匹配

时间:2015-10-26 07:25:12

标签: php regex preg-match

我正试图从这个字符串中获取“内容”:

$string = "start start content end";

使用这样的preg_match:

preg_match('/start(.*?)end/', $string, $matches);
echo $match[1];

但问题是$matches[1]不仅start content返回content,因为start中有两个$string(可能更多)

如何仅使用content获取preg_match部分?

2 个答案:

答案 0 :(得分:3)

使用否定前瞻:

$string = "start start content end";
preg_match('/start\h*((?:(?!start).)*)end/', $string, $matches);
echo $matches[1];
// content

(?:(?!start).)会匹配任何字符,如果start后面没有。

答案 1 :(得分:0)

您可以添加+来吃掉所有start,然后捕获所需的字符串。

(?:start\s)+(.+?)end