如何使用Perl正则表达式在目录中列出带.c和.h的文件

时间:2015-06-04 09:26:58

标签: regex perl

如何在目录中列出包含.c.h文件的文件 目前正在使用if(m/.\.c$/)它只提供.c个文件。我需要.c.h个文件的正则表达式。

3 个答案:

答案 0 :(得分:2)

在Perl中,您可以使用以下代码列出具有.c.h扩展名的所有文件:

opendir my $dir, "some/path/" or die "Cannot open directory: $!";
my @files = grep{/\.c$|\.h$/}readdir $dir;
closedir $dir;
print "@files";

修改
如果你真的想使用if(),你可以这样做:

opendir my $dir, "some/path/" or die "Cannot open directory: $!";
my @files = readdir $dir;
closedir $dir;
foreach (@files)
{
    if (/.\.[ch]\z/s)
    {
        print "$_\n";
    }
}

答案 1 :(得分:1)

使用字符类。也就是说,将package.jsonc放在方括号内。

h

if(m/.\.[hc]$/) 匹配[hc]h

答案 2 :(得分:0)

要获取目录中的文件列表,请使用glob()。请参阅perldoc -f glob http://perldoc.perl.org/functions/glob.html

my @files = glob( "$path/*.[ch]" );
print "$path : @files\n";

如果路径或文件名中有空格,请使用File::Glob中的bsd_glob

use File::Glob qw( :bsd_glob );
my @files = glob( "$path/*.[ch]" );
print "$path : @files\n";

请参阅perldoc File::Glob http://perldoc.perl.org/File/Glob.html

File::Glob是标准模块,随Perl一起安装。有关所有标准模块的列表,请参阅perldoc perlmodlib http://perldoc.perl.org/perlmodlib.html