使用preg_match获得意想不到的结果


Using preg_match getting unexpected results

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

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

结果:

图出来了

需要结果:

数字

发生的事情

是,你的.+序列默认是贪婪的,所以它会吞噬字符串末尾的所有内容。由于之后您的正则表达式中还有一个空间,它会回溯直到它可以匹配该空间,因此最终匹配"弄清楚"。

你可以使用非贪婪量词(它一次只吃一个,向前而不是反向工作):.+?,或"单词"字符(字母/数字/下划线):'w+