regex – 使用数组时的Perl模式匹配
发布时间:2020-12-15 21:57:46 所属栏目:大数据 来源:网络整理
导读:我在匹配模式时遇到了一个奇怪的问题. 考虑下面的Perl代码 #!/usr/bin/perl -wuse strict;my @Array = ("Hello|World","Good|Day");function();function();function();sub function { foreach my $pattern (@Array) { $pattern =~ /(w+)|(w+)/g; print $1
我在匹配模式时遇到了一个奇怪的问题.
考虑下面的Perl代码 #!/usr/bin/perl -w use strict; my @Array = ("Hello|World","Good|Day"); function(); function(); function(); sub function { foreach my $pattern (@Array) { $pattern =~ /(w+)|(w+)/g; print $1."n"; } print "n"; } __END__ 我期望的输出应该是 Hello Good Hello Good Hello Good 但我得到的是 Hello Good Use of uninitialized value $1 in concatenation (.) or string at D:perlfilesproblem.pl li ne 28. Use of uninitialized value $1 in concatenation (.) or string at D:perlfilesproblem.pl li ne 28. Hello Good 我观察到的是模式交替匹配. sub function { my $string; foreach my $pattern (@Array) { $string .= $pattern."n"; } while ($string =~ m/(w+)|(w+)/g) { print $1."n"; } print "n"; } 现在我按预期得到了输出. 解决方法
它是全局/ g修饰符正在起作用.它记住了最后一次模式匹配的位置.当它到达字符串的末尾时,它会重新开始.
删除/ g修饰符,它将按预期运行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |