Arrays 如何使用regex而不是glob表达式过滤文件名?
我正在筛选目录的文件:Arrays 如何使用regex而不是glob表达式过滤文件名?,arrays,perl,filtering,Arrays,Perl,Filtering,我正在筛选目录的文件: chdir '/home/brian/mypics/'; @picArray = <*.JPG *.GIF *.jpg *.gif *.PNG *.png *.jpeg>; @soundArray = <*.mid *.MID *.wav *.WAV *.mp3 *.MP3 *.wma *.WMA *.ogg *.OGG>; chdir'/home/brian/mypics/; @picArray=; @声音阵列=; 我知道必须有一种更好、
chdir '/home/brian/mypics/';
@picArray = <*.JPG *.GIF *.jpg *.gif *.PNG *.png *.jpeg>;
@soundArray = <*.mid *.MID *.wav *.WAV *.mp3 *.MP3 *.wma *.WMA *.ogg *.OGG>;
chdir'/home/brian/mypics/;
@picArray=;
@声音阵列=;
我知道必须有一种更好、更简单的方法,这种方法不区分大小写,可以支持正则表达式,比如gif | png | jpe?g
和wma | ogg | mp3 | wave | midi?
我怎样才能有一个数组来捕获所有未知的文件类型(例如,如果其中一个是
.exe
,那么它将位于一个数组中,因为其他两个从未捕获到它)?opendir/readdir可以工作:
opendir(my $dh, "/tmp/");
my @files = readdir($dh);
my @picArray = grep { /\.(gif|png|jpe?g)$/i } @files;
my @soundArray = grep { /\.(wma|ogg|mp3|wave?|midi?)$/i } @files;
您可能需要调整这些正则表达式,使它们只在文件名末尾匹配(并且可能还要查找前面的点)。否则,您将最终匹配
gifford.txt
。我刚刚在regexp中添加了I
限定符,因为OP要求不区分大小写的匹配。要回答问题的第二部分,请使用划分列表。下一次最好另问一个问题。