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;
}