什么是$1
?这是(\d+)
找到的匹配项吗?
$line =~ /^(\d+)\s/;
next if(!defined($1) ) ;
$paperAnnot{$1} = $line;
答案 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 ......等魔术变量。如果正则表达式不匹配,则它们将是未定义的。