使用正则表达式捕获分组编写以下代码是否有更好的方法?
我想在录制后立即获取文件夹名称。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $path1 = '\\server1\Recordings\AU-AR-Online\Outbound\20160120\52031\52031-14-07-16.wav';
my $path2 = '\\server2\e$\Recordings\SU-AC-Online\Outbound\20160120\52031\52031-14-07-16.wav';
my @paths = ( $path1,$path2 );
foreach my $path (@paths) {
# Split path into fields
my @array = (split /\\/, $path);
# Get index of Recordings
my( $index )= grep { $array[$_] eq "Recordings" } 0..$#array;
# Brand always follows Recordings
print $array[$index+1];
}
答案 0 :(得分:2)
当然,只需用以下内容替换循环内容:
my ($brand) = $path =~ m|\\Recordings\\([^\\]+)| or die "Not found";
print $brand;
答案 1 :(得分:1)
在Recordings\
my ($brand) = $path =~ m{ Recordings \\ ( [^\\] + ) }x )
在正则表达式上使用x
修饰符意味着忽略空格,这有助于使正则表达式更具可读性。
如果品牌文件夹总是排在第5位,您可以拆分路径并通过否定索引来抓取它。
my $brand = (split /\\/, $path)[-5];
但同样,这只有在品牌总是排在第5位才有效。我不知道你的数据集是什么。
此外,如果您使用路径,则有许多模块(例如Path::Tiny
)可以更容易地获取父/子/绝对路径,基本名称等。