【发布时间】:2013-07-27 04:04:16
【问题描述】:
我正在尝试使用 PHP 和 preg_match 在行尾的分隔符后获取一个字符串。这些是我的代码:
<?php
$stringa = <<<EOT
var1=Ciao
var2=Variabile
var3=We
EOT;
preg_match("#var2=(.*?)\n#", $stringa, $boh);
print_r($boh);
?>
这有效,但不适用于最后一行,如果我在正则表达式中将 var2 替换为 var3,则生成的数组将为空。
【问题讨论】:
-
有人能解释一下
(.*?)中问号的语义吗?我知道?的意思是“可选”,如{0,1}或(xxx|),但我从未见过它在下面使用过*。它是否适用于.*的整个表达式?如果是这样,那不是多余的吗,因为*可以匹配 0 次出现? -
@PeterAlfvin -
?可以跟随任何量词以使该量词非贪婪。 (您可以查找该术语。)简而言之,它指示量词匹配尽可能少的实例(而不是尽可能多的实例,这是默认行为)。例如,*?、+?、??、{2,5}?,都是相应量词的非贪婪版本。 -
@acheong87 - 谢谢!