Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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
Perl正则表达式根据预定义数组搜索文件名和扩展名_Perl - Fatal编程技术网

Perl正则表达式根据预定义数组搜索文件名和扩展名

Perl正则表达式根据预定义数组搜索文件名和扩展名,perl,Perl,我想从目录中筛选出一些文件。我能够递归地获取文件及其扩展名,但现在我想做的是使用通配符搜索将文件扩展名和文件名与预定义的扩展名和文件名数组相匹配,就像我们在sql中使用的那样 my @ignore_exts = qw( .vmdk .iso .7z .bundle .wim .hd .vhd .evtx .manifest .lib .mst ); 我想过滤掉那些扩展名与上面一样的文件。 e、 g.文件名为abc.1.149_1041.mst,由于扩展名.mst存在于@ignore\u ext

我想从目录中筛选出一些文件。我能够递归地获取文件及其扩展名,但现在我想做的是使用通配符搜索将文件扩展名和文件名与预定义的扩展名和文件名数组相匹配,就像我们在sql中使用的那样

my @ignore_exts = qw( .vmdk .iso .7z .bundle .wim .hd .vhd .evtx .manifest .lib .mst );
我想过滤掉那些扩展名与上面一样的文件。 e、 g.文件名为
abc.1.149_1041.mst
,由于扩展名
.mst
存在于
@ignore\u ext
中,因此我希望将其过滤掉。我得到的扩展名是
'.1.149_1041.mst'
。在sql中,我将执行类似于“%.mst”之类的扩展名的
select*操作。我想在perl中做同样的事情

这是我用来抓取分机的

my $ext = (fileparse($filepath, '\..*?')) [2];

要从文件名中提取文件扩展名,应执行以下操作:

/^(.*)\.([^.]+)$/
$fileName = $1;
$extension = $2;
这可能对你有用

输入:
a.b.c.text

$1
将是
a.b.c.d

$2
将是
文本

基本上,这将包括从线路开始到最后一个时段的所有内容,以及第一组中的组,然后将从最后一个时段到线路结束的所有内容作为第2组

您可以在此处看到一个示例:

至于检查此处读取的数组中是否存在扩展名:()


只需将扩展列表转换为正则表达式,然后对
$filepath
进行测试

my @ignore_exts = qw( .vmdk .iso .7z .bundle .wim .hd .vhd .evtx .manifest .lib .mst );
my $ignore_exts_re = '(' . join('|', map quotemeta, @ignore_exts) . ')$';
然后再比较

if ($filepath =~ $ignore_exts_re) {
    print "Ignore $filepath because it ends in $1\n";
    next;
if ($filepath =~ $ignore_exts_re) {
    print "Ignore $filepath because it ends in $1\n";
    next;