据我所知,perl global’/ 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
从输出中可以看出,全局标志匹配仅发生一次.有人可以解释这种行为.
使用g修饰符,字符串会记住其最后一次匹配的位置,因此您可以在while循环中请求与g匹配并查找所有匹配项.
原文链接:https://www.f2er.com/regex/357232.html如果没有g,你每次都会重新开始,总能找到第一场比赛.
在你的情况下,使用g,你第一次匹配3.2,但是第二次尝试匹配时,没有更多的匹配.
如果没有g,你可以调用getFloat()数万次,你总能找到第一个匹配.