Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何使用regex而不是glob表达式过滤文件名?_Arrays_Perl_Filtering - Fatal编程技术网

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要求不区分大小写的匹配。要回答问题的第二部分,请使用划分列表。下一次最好另问一个问题。