8位十六进制数字的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 "$1n";
        }
    }
}

我在regex101上测试了regex,它找到了正确的字符串(8位十六进制),但代码找不到任何以8位十六进位为名称的文件夹。我怀疑这与某些需要转义的字符有关,例如$,但我尝试了许多不同的组合,但都没有成功。

例如,我拥有的文件夹名称是906f3387

您的regex使用大写A-F,但您的文件夹使用小写。使用/^[0-9a-fA-F]{8}$/显式允许小写,或使用/^[0-9A-F]{8}$/i忽略匹配中的大小写。

最新更新