如何匹配以字母数字字符开头并且只有三个特殊字符的文件。 _-?

时间:2018-09-29 17:33:43

标签: regex perl

我是perl的初学者,想匹配以A-Z和0-9开头的文件。它们还仅包含. _ -个特殊字符。
这是我到目前为止的内容:

if (($file !~ /^[a-zA-Z0-9][\-\_\.a-zA-Z0-9]*/)) {
    print ("error: invalid filename");
}

我测试了该程序,它可以找到文件名错误,例如-5,$ 5,#5, 但是它无法捕获错误名称为5#,5%,5 @等的文件名...

我根本找不到真正的问题。我在做什么错了?

1 个答案:

答案 0 :(得分:2)

问题在于您的正则表达式锚定在开头(^)而不是结尾处。任何以开头有效文件名的$file。由于5#5开头,因此一直通过。

修复:

if ($file !~ /^[a-zA-Z0-9][\-_.a-zA-Z0-9]*\z/) {
    print "error: invalid filename\n";
}

\z仅在字符串的末尾匹配,并将模式锚定在末尾。

_不是正则表达式元字符,不需要进行转义。 .不是[ ]组中的元字符。

相关问题