Regex 我在这个perl正则表达式中哪里出错了?

Regex 我在这个perl正则表达式中哪里出错了?,regex,perl,Regex,Perl,我试图使用正则表达式来区分readdir是否返回文件或文件夹 这是我的代码: opendir($dh, $_[0]) || die "Can't open folder!"; while(($filename = readdir($dh))){ if ($filename =~ /..*\...*/) {...}} 这个正则表达式的思想是,它要求在点之前和之后至少有一个字符。我在perl online regular expression tester中测试了这个表达式(在开始和结束时都

我试图使用正则表达式来区分readdir是否返回文件或文件夹

这是我的代码:

opendir($dh, $_[0]) || die "Can't open folder!";
while(($filename = readdir($dh))){
   if ($filename =~ /..*\...*/) {...}}
这个正则表达式的思想是,它要求在点之前和之后至少有一个字符。我在perl online regular expression tester中测试了这个表达式(在开始和结束时都没有“/”),它运行正常,但在实际情况下总是返回false


我做错了什么?谢谢

除非您的文件遵循特殊约定,否则您无法仅通过查看名称来区分文件和文件夹。您可以使用
-d
检查路径是否为文件夹(请参阅)


除非文件遵循特殊约定,否则仅通过查看名称无法区分文件和文件夹。您可以使用
-d
检查路径是否为文件夹(请参阅)


它应该可以工作,请给出一些不匹配的文件名。表达式可以工作,但您应该将
.*
写成
+
<代码>+在PCRE中表示“一个或多个重复”。例如:“.”、“.”、“.abc.xls”、“sub1”。(sub1是目录)从什么时候开始,dot前后至少有一个字符是作为文件夹或文件的标准?应该可以,请给出一些不匹配的文件名。表达式可以工作,但您应该将
.
写成
+
<代码>+在PCRE中表示“一个或多个重复”。例如:“.”、“.”、“.abc.xls”、“sub1”。(sub1是目录)从什么时候开始,dot前后至少有一个字符是文件夹或文件的标准?
my $root = $_[0];
opendir($dh, $root) || die "Can't open folder!";
while(($filename = readdir($dh)))
{
    next if $filename =~ /^\.{1,2}$/; # skip . and ..
    if (-d "$root/$filename")
    {
        # $filename is a folder
    }
    else
    {
        # $filename is something else (regular file, symlink, ...)
    }
}