使用preg_match获得意外结果

时间:2016-03-11 02:17:50

标签: php regex preg-match

我正在尝试使用正则表达式,但会得到意想不到的结果:

<?php

$a = "Can't you figure it out?";
preg_match("~you (.+) ~", $a, $match);
echo $match[1];

?>

结果:

想一想

需要结果:

1 个答案:

答案 0 :(得分:2)

正在发生的事情是您的.+序列默认情况下是贪婪,因此它会将所有内容吞噬到字符串的末尾。由于此后你的正则表达式中还有一个空格,它会回溯到它可以匹配那个空格,因此最终匹配&#34;计算它&#34;。

你可以使用非贪婪的量化器(它只吃一个并且向前工作而不是反向):.+?,或者#34;字&#34;字符(字母/数字/下划线):\w+