如何使用正则表达式而不是glob表达式过滤文件名?

时间:2011-11-10 05:11:48

标签: 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>;

我知道必须有一种更好,更简单的方法,这种方式不区分大小写,可以允许像gif|png|jpe?gwma|ogg|mp3|wave?|midi?这样的正则表达式。

我怎样才能有一个数组来捕获所有未知的文件类型(例如,如果一个是.exe,它将是一个数组,所有它都是自己的,因为其他两个从未捕获过它)?

1 个答案:

答案 0 :(得分:2)

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;