【问题标题】:Perl pattern matching when using arrays使用数组时的 Perl 模式匹配
【发布时间】:2012-03-29 12:11:05
【问题描述】:

我在匹配模式时遇到了一个奇怪的问题。

考虑下面的 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__

我期望的输出应该是


你好 好的 你好 好的 你好 好的

但我得到的是

你好 好的 在 D:\perlfiles\problem.pl 的连接 (.) 或字符串中使用未初始化的值 $1 28. 在 D:\perlfiles\problem.pl 的连接 (.) 或字符串中使用未初始化的值 $1 28. 你好 好的

我观察到的是模式交替匹配。
谁能解释一下这段代码有什么问题。
为了解决这个问题,我将函数子例程更改为如下内容:

sub function 
{
    my $string;
    foreach my $pattern (@Array)
    {
        $string .= $pattern."\n";
    }
    while ($string =~ m/(\w+)\|(\w+)/g)
    {
            print $1."\n";
    }
    print "\n";
}

现在我得到了预期的输出。

【问题讨论】:

    标签: regex perl


    【解决方案1】:

    起作用的是全局/g 修饰符。它记住最后一个模式匹配的位置。当它到达字符串的末尾时,它会重新开始。

    删除/g 修饰符,它会按照您的预期运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多