在Perl中,$1代表什么?

3

$1是什么?它是匹配(\d+)的结果吗?

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

2
因为这里还没有提到,所以请查看perldoc perlre页面获取更多信息。 - kbenson
perldoc perlvar 中还有一些更有趣的信息。// 没有注意到已经建议这样做了。 - ZyX
3个回答

4

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


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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接