Perl正则表达式:问号不是贪婪匹配

Dan*_*ham 3 regex perl

$var = 'about/';
$var =~ s/^(.*)\/?$/index.php?action=$1/;
Run Code Online (Sandbox Code Playgroud)

我希望它匹配并替换尾部斜杠.但事实并非如此,我得到了这样的结果:

index.php?action=about/
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我已经尝试将它包装在括号中(\/)?并在括号中包含问号(\/?).不包括前面的正斜杠显然对我没有任何好处.那么当它在那里时,怎么能让它吃掉斜线呢?

Jen*_*ens 11

你的问题是,.*贪婪也是如此.尝试使用.*?.

Regex引擎首先.*尽可能扩展,然后检查正则表达式是否可以匹配输入.在你的情况下,它确实如此,因为尾部斜杠是可选的.然后回家满意.