Regex 我在这个perl正则表达式中哪里出错了?
我试图使用正则表达式来区分readdir是否返回文件或文件夹 这是我的代码: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中测试了这个表达式(在开始和结束时都
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, ...)
}
}