Perl正则表达式为8位十六进制数字(可能缺少转义字符)

时间:2015-06-24 15:31:09

标签: regex perl

我有以下代码,用于查找名称为8位十六进制数的文件夹

use strict;
use warnings;

opendir(DIR, ".\\");
my @files = readdir(DIR);
closedir DIR;
foreach my $key (@files)
{
    if(-d ".\\$key")
    {
        if ($key =~ /(^[0-9A-F]{8}?$)/){
            print "$1\n";
        }
    }
}

我在regex101上测试了正则表达式并且它找到了正确的字符串(8位十六进制数字),但是代码无法找到我有8位十六进制作为名称的任何文件夹。我怀疑它与需要转义的某些字符有关,例如$但我尝试了许多不同的组合而没有成功。

e.g。我拥有的文件夹名称是906f3387

1 个答案:

答案 0 :(得分:7)

你的正则表达式是使用大写A-F,但你的文件夹是小写的。使用/^[0-9a-fA-F]{8}$/明确允许小写,或/^[0-9A-F]{8}$/i忽略匹配中的大小写。