【发布时间】:2011-08-07 09:21:26
【问题描述】:
据我所知,在 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 ";
}
}
输出: 匹配> 3.2
从输出中可以看出,与全局标志匹配只发生一次。有人可以解释这种行为吗?
【问题讨论】:
-
你应该看看perldoc perlretut
-
您期待什么?你想让它一直匹配直到它不匹配?那不是意味着
if条件总是错误的。简而言之,if (/.../g)毫无意义。