2011-11-10 129 views
0

我過濾一個目錄的文件:如何用正則表達式替換glob表達式來過濾文件名?

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,它將在數組中全部都是自己的,因爲其他兩個從未捕獲它)?

+0

要回答的問題的第二部分,用['part'](http://stackoverflow.com/q/6706426#6706755)進行分區的列表。下次更好地打開一個單獨的問題。 – daxim

回答

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; 
+0

夠簡單,謝謝。 – ParoX

+0

你可能想要調整這些正則表達式,以便它們只匹配文件名的末尾(也可能會查找前面的點)。否則,你會發現匹配'gifford.txt'。 – cjm

+0

好點。編輯的解決方案。 – bigendian