为什么我的Perl正则表达式删除了.在文件扩展名之前?

mam*_*aye 2 regex perl

我有这个正则表达式:

$f =~ s/[.\W_]//g;
Run Code Online (Sandbox Code Playgroud)

它只保留数字,字母和数字.在文件名(filename.ext)中.

但它不是.在文件扩展名之前保留(点).所以,如果我有:

my $f = "prn-the_rush show.jpg"
Run Code Online (Sandbox Code Playgroud)

结果 prntherushshowjpg.缺少了!

我想要prntherushshow.jpg结果.

我怎么做?

jwo*_*der 7

重写字符类以明确匹配您要保留的内容的补码:

$f =~ s/[^A-Za-z0-9.]//g;
Run Code Online (Sandbox Code Playgroud)

您也可以使用tr///(aka y///)更有效地完成同样的事情:

$f =~ tr/A-Za-z0-9.//cd;
Run Code Online (Sandbox Code Playgroud)