sun*_*ica 4 regex perl greedy regex-greedy
我以为我在合理的范围内理解了Perl RE,但这令我感到困惑:
#!/usr/bin/perl
use strict;
use warnings;
my $test = "'some random string'";
if($test =~ /\'?(.*?)\'?/) {
print "Captured $1\n";
print "Matched $&";
}
else {
print "What?!!";
}
Run Code Online (Sandbox Code Playgroud)
版画
捕获的
匹配'
它似乎与"结局"相匹配,因此没有任何结果.
我本来期望它与整个事物相匹配,或者如果它完全不贪婪,什么都没有(因为一切都有可选匹配).
这种行为让我感到困惑,任何人都可以解释发生了什么?
Sim*_*son 14
所述\'?在开始和结束是指匹配0或1撇号贪婪地.(正如另一张海报指出的那样,为了使它不贪婪,它必须是\'??)
该.*?中间装置匹配0个或多个字符的非贪婪地.
Perl正则表达式引擎将查看字符串的第一部分.它将匹配开头,但是贪婪地这样做,所以它拿起了第一个撇号.然后它匹配非贪婪(所以尽可能少),然后是可选的撇号.这与空字符串匹配.
| 归档时间: |
|
| 查看次数: |
6388 次 |
| 最近记录: |