加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 帮助理解perl中的全局标志

发布时间:2020-12-14 06:30:48 所属栏目:百科 来源:网络整理
导读:据我所知,perl global’/ g’标志表示搜索将替换/返回整个字符串中的所有匹配项.但是我无法理解它在匹配时对全局变量的反应方式,有人可以解释为什么这两个示例程序的输出之间存在差异: 版本1: my $text = 'This is sample float value 3.2 ';getFloat();ge
据我所知,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匹配并查找所有匹配项.

如果没有g,你每次都会重新开始,总能找到第一场比赛.

在你的情况下,使用g,你第一次匹配3.2,但是第二次尝试匹配时,没有更多的匹配.

如果没有g,你可以调用getFloat()数万次,你总能找到第一个匹配.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读