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 Perl中的$1是什么?_Regex_Perl - Fatal编程技术网

Regex Perl中的$1是什么?

Regex Perl中的$1是什么?,regex,perl,Regex,Perl,什么是$1?是否找到了(\d+)的匹配项 您是对的,$1表示第一个捕获组,在您的示例中是(\d+)是的,括号中捕获的任何内容都被分配给$1、$2、$3。。。等等,神奇的变数。如果regexp不匹配,它们将是未定义的。是的!这是团体赛。看到下一个,它可能在一个循环中。但是,更好的处理方法是使用条件语句并测试正则表达式: if ( $line =~ /^(\d+)\s/ ) { $paperAnnot{$1} = $line; } 或者更好的做法是,给它起一个1美元的名字,让它能够自我记录

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


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

是的,括号中捕获的任何内容都被分配给$1、$2、$3。。。等等,神奇的变数。如果regexp不匹配,它们将是未定义的。

是的!这是团体赛。看到
下一个
,它可能在一个循环中。但是,更好的处理方法是使用条件语句并测试正则表达式:

if ( $line =~ /^(\d+)\s/ ) {
    $paperAnnot{$1} = $line;
}
或者更好的做法是,给它起一个1美元的名字,让它能够自我记录:

if ( $line =~ /^(\d+)\s/ ) {
    my $index = $1;
    $paperAnnot{$index} = $line;
}
此外,您还可以在中找到有关
$1
及其兄弟的更多信息

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

use 5.010; # or newer
...
if ( $line =~ /^(?<linenum>\d+)\s/ ) {
    $paperAnnot{ $+{linenum} } = $line;
}
使用5.010;#或更新
...
如果($line=~/^(?\d+)\s/){
$paperAnnot{$+{linenum}}=$line;
}

有关命名捕获组的详细信息,请参见。

因为此处其他地方尚未提及,请参见perldoc perlre页面以了解更多信息。
perldoc perlvar
中有一些更有趣的信息没有注意到已经建议这样做了。
use 5.010; # or newer
...
if ( $line =~ /^(?<linenum>\d+)\s/ ) {
    $paperAnnot{ $+{linenum} } = $line;
}