据我所知,在 Perl 中,全局'/g'标志意味着搜索将替换/返回字符串中的所有匹配项。但是我无法理解它在匹配过程中对全局变量产生的影响,有人能够解释一下为什么这两个示例程序的输出有所不同吗:
版本1:
my $text = 'This is sample float value 3.2 ';
getFloat();
getFloat();
sub getFloat(){
if ($text =~ /([0-9]+?)(.?)([0-9]+?)/is){
print "matched> $1$2$3 ";
}
}
输出: 匹配成功> 3.2 匹配成功> 3.2
版本2:(带有全局标志)
my $text = 'This is sample float value 3.2 ';
getFloat();
getFloat();
sub getFloat(){
if ($text =~ /([0-9]+?)(.?)([0-9]+?)/gis){
print "matched> $1$2$3 ";
}
}
输出: matched> 3.2
从输出可以看出,使用全局标志(matching)只会匹配一次。有人能解释这种行为吗?
if
条件将永远为假吗?简而言之,if (/.../g)
没有意义。 - ikegami