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

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修饰符,它将按预期运行.

(编辑:李大同)

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

    推荐文章
      热点阅读