Regex perl linux文件名验证
我试图用Perl验证一个文件名,但我无法让它工作,我不确定我做错了什么。请参阅下面的代码Regex perl linux文件名验证,regex,string,perl,Regex,String,Perl,我试图用Perl验证一个文件名,但我无法让它工作,我不确定我做错了什么。请参阅下面的代码 while ($filename !~ /^[-\w]\.pl$/){ print "Invalid file name, type another : "; my $filename = <STDIN>; chomp $filename; } while($filename!~/^[-\w]\.pl$/){ 打印“无效文件名,请键入另
while ($filename !~ /^[-\w]\.pl$/){
print "Invalid file name, type another : ";
my $filename = <STDIN>;
chomp $filename;
}
while($filename!~/^[-\w]\.pl$/){
打印“无效文件名,请键入另一个:”;
我的$filename=;
chomp$filename;
}
$filename!~/^[-\w]\.pl$/
此表达式仅允许一个字符长的文件名(不包括扩展名),该字符为单词字符或破折号
我猜你的意思是:
$filename !~ /^[-\w]+\.pl$/
注意:正如所评论的,正则表达式的另一个问题是它允许文件名在扩展名后有一个尾随的新行。为了避免这种情况,您可以使用\z
断言:
$filename !~ /^[-\w]+\.pl\z/
您能详细说明什么不起作用吗?这将允许两个扩展,
“.pl”
和“.pl\n”
。您可能需要\z
。此外,还允许使用以破折号开头的文件名,这非常烦人。所以我想这个更好:/^\w[-\w]*\.pl\z/