Php 使用preg_match获得意外结果
我尝试使用正则表达式,但得到了意外的结果:Php 使用preg_match获得意外结果,php,regex,preg-match,Php,Regex,Preg Match,我尝试使用正则表达式,但得到了意外的结果: <?php $a = "Can't you figure it out?"; preg_match("~you (.+) ~", $a, $match); echo $match[1]; ?> 所发生的事情是,默认情况下,+序列是贪婪的,因此它会吞噬所有内容,直到字符串结束。因为在此之后您的正则表达式中还有一个空间,所以它会回溯,直到它能够匹配该空间,因此最终匹配为“figure it” 您可以使用非贪婪量化器(它一次只吃一个,并向前
<?php
$a = "Can't you figure it out?";
preg_match("~you (.+) ~", $a, $match);
echo $match[1];
?>
所发生的事情是,默认情况下,+
序列是贪婪的,因此它会吞噬所有内容,直到字符串结束。因为在此之后您的正则表达式中还有一个空间,所以它会回溯,直到它能够匹配该空间,因此最终匹配为“figure it”
您可以使用非贪婪量化器(它一次只吃一个,并向前工作,而不是反向):?
,或“word”字符(字母/数字/下划线):\w+
发生的情况是,默认情况下,+
序列是贪婪的,因此它会将所有内容吞噬到字符串末尾。因为在此之后您的正则表达式中还有一个空间,所以它会回溯,直到它能够匹配该空间,因此最终匹配为“figure it”
您可以使用非贪婪量化器(它一次只吃一个,并向前工作,而不是反向):?
,或“单词”字符(字母/数字/下划线):\w+