Perl的1美元是多少?

时间:2010-04-29 07:53:30

标签: regex perl

什么是$1?这是(\d+)找到的匹配项吗?

$line =~ /^(\d+)\s/; 
next if(!defined($1) ) ;
$paperAnnot{$1} = $line;

3 个答案:

答案 0 :(得分:4)

你是对的,$1表示第一个捕获组,在你的示例中是(\d+)

答案 1 :(得分:3)

是的!这是一场小组赛。看到那里的next,它可能在一个循环中。但是,处理你所拥有的东西的更好方法是使用条件并测试正则表达式:

if ( $line =~ /^(\d+)\s/ ) {
    $paperAnnot{$1} = $line;
}

甚至更好,给1美元一个名字让它自我记录:

if ( $line =~ /^(\d+)\s/ ) {
    my $index = $1;
    $paperAnnot{$index} = $line;
}

此外,您可以在perldoc perlvar找到有关$1及其兄弟的更多信息。

现在在Perl 5.10和更新版本中,您可以使用命名捕获组:

use 5.010; # or newer
...
if ( $line =~ /^(?<linenum>\d+)\s/ ) {
    $paperAnnot{ $+{linenum} } = $line;
}

使用perldoc perlre了解有关命名捕获论坛的详情。

答案 2 :(得分:2)

是的,括号中捕获的任何内容都分配给$ 1,$ 2,$ 3 ......等魔术变量。如果正则表达式不匹配,则它们将是未定义的。