Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex$1进入变量会干扰另一个变量_Regex_Perl - Fatal编程技术网

Regex$1进入变量会干扰另一个变量

Regex$1进入变量会干扰另一个变量,regex,perl,Regex,Perl,我已经挣扎了一段时间,我的代码部分,现在无法找出它。似乎与1美元的处理方式有关,但我找不到任何相关信息 正则表达式找到16640021并将其分配到数组中的一个位置 my @one; my @two; my $articleregex = qr/\s*\d*\/\s*\d*\|\s*(.*?)\|/p; # $1 = article number my $row = " 7/ 1| 16640021|Taats 3 IP10 |14-

我已经挣扎了一段时间,我的代码部分,现在无法找出它。似乎与1美元的处理方式有关,但我找不到任何相关信息

正则表达式找到16640021并将其分配到数组中的一个位置

my @one;
my @two;
my $articleregex = qr/\s*\d*\/\s*\d*\|\s*(.*?)\|/p; # $1 = article number
my $row = "   7/  1|        16640021|Taats 3 IP10                       |14-03-03|        |    |        1,0000|st |   | 01|    | N|  0|";

    if ($row =~ /$articleregex/g) {
        $one[0] = $1; 
    }
    if ($row =~ /$articleregex/g) { 
        $two[0] = $1;
    }
print $one[0];
print $two[0];
哪个输出

Use of uninitialized value in print at perltest3.pl line 13.
16640021

似乎$1[0]的名称在某种程度上干扰了$2[0]的名称。这对我来说似乎很奇怪,因为这两个变量及其名称不应该以任何方式相互作用,因为您使用了
if(//g)
而不是
if(//)

  • 标量上下文中的
    //g
    pos($\u)
    [1]设置为停止匹配的位置,或者如果匹配不成功,则取消设置
    pos($\u)
    [1]
  • 标量上下文中的
    //g
    在位置
    pos($\ux)
    [1]处开始匹配
比如说,

$_ = "ab";
say /(.)/g ? $1 : "no match";  # a
say /(.)/g ? $1 : "no match";  # b
say /(.)/g ? $1 : "no match";  # no match
say /(.)/g ? $1 : "no match";  # a
这允许以下内容在匹配中进行迭代:

while (/(.)/g) {
   say $1;
}
如果(//g)[3],不要使用


  • $\uu
    用于表示匹配的变量
  • 除非还使用了
    /c
  • 除非您在(//g)
  • 时展开
    ,或者使用
    if(//gc)
    进行标记化
    这是因为您使用了
    if(//g)
    而不是
    if(//)

    • 标量上下文中的
      //g
      pos($\u)
      [1]设置为停止匹配的位置,或者如果匹配不成功,则取消设置
      pos($\u)
      [1]
    • 标量上下文中的
      //g
      在位置
      pos($\ux)
      [1]处开始匹配
    比如说,

    $_ = "ab";
    say /(.)/g ? $1 : "no match";  # a
    say /(.)/g ? $1 : "no match";  # b
    say /(.)/g ? $1 : "no match";  # no match
    say /(.)/g ? $1 : "no match";  # a
    
    这允许以下内容在匹配中进行迭代:

    while (/(.)/g) {
       say $1;
    }
    
    如果(//g)
    [3],不要使用


  • $\uu
    用于表示匹配的变量
  • 除非还使用了
    /c
  • 除非您在(//g)
  • 时展开
    ,或者使用
    if(//gc)
    进行标记化