Joe*_*ger 10 regex perl capture
我正在开发一个项目,它一次从ftp服务器获取文件列表.此时,它返回文件的arrayref,或者如果qr传递了可选的正则表达式引用(即),则使用grep过滤列表.此外,如果它qr有一个捕获组,它会将捕获的部分视为版本号,而是返回一个hashref,其中键是版本,值是文件名(如果没有捕获组,它将作为数组返回).代码看起来像(稍微简化)
sub filter_files {
my ($files, $pattern) = @_;
my @files = @$files;
unless ($pattern) {
return \@files;
}
@files = grep { $_ =~ $pattern } @files;
carp "Could not find any matching files" unless @files;
my %versions =
map {
if ($_ =~ $pattern and defined $1) {
( $1 => $_ )
} else {
()
}
}
@files;
if (scalar keys %versions) {
return \%versions;
} else {
return \@files;
}
}
Run Code Online (Sandbox Code Playgroud)
此实现尝试创建哈希并在成功时返回它.我的问题是,我可以检测到它qr有一个捕获组,并且只是尝试创建哈希吗?
Qta*_*tax 18
你可以使用类似的东西:
sub capturing_groups{
my $re = shift;
"" =~ /|$re/;
return $#+;
}
say capturing_groups qr/fo(.)b(..)/;
Run Code Online (Sandbox Code Playgroud)
输出:
2
Run Code Online (Sandbox Code Playgroud)