RegExp使用目录和文件扩展名黑名单过滤特定文件路径

时间:2014-07-28 15:30:46

标签: regex filtering filepath negative-lookahead

我有示例路径:

/var/ftp/video/Portuguese/Portuguese-Daniel/Animação Inicial/CLIPS/Torsten.Sturmwellen.Veith/Wellen_00653.tif

我需要将 / var / ftp / video / English 目录以及一些文件扩展名列入黑名单(例如doc / docx / ppt / pptx / tif / tiff / pdf / jpg / DS_Store)

我使用的RegExp是:

^(?!\/var\/ftp\/video\/English)(.*\.(?!doc.*$|ppt.*$|jpg.*$|tif.*$|pdf.*$|DS_Store.*$)[^.]+)

但它不起作用,因为它匹配此示例路径(但没有扩展名)。 要进行测试,我使用http://regex101.com/网站。

我的RegExp有什么问题?

2 个答案:

答案 0 :(得分:0)

表达式

(.*\.(?!doc.*$|ppt.*$|jpg.*$|tif.*$|pdf.*$|DS_Store.*$)[^.]+)

明确排除扩展名。这就是你的表达不起作用的原因。

表达式

(.*\.(?!doc.*$|ppt.*$|jpg.*$|tif.*$|pdf.*$|DS_Store.*$).*)

包含扩展名。

使用此perl代码进行测试:

$a="/var/ftp/video/Portuguese/Portuguese-Daniel/Animação Inicial/CLIPS/Torsten.Sturmwellen.Veith/Wellen_00653.tif";

if ($a=~/^(?!\/var\/ftp\/video\/English)(.*\.(?!doc.*$|ppt.*$|jpg.*$|tif.*$|pdf.*$|DS_Store.*$).*+)/) {
print "$1\n";}

结果:

/var/ftp/video/Portuguese/Portuguese-Daniel/Animação Inicial/CLIPS/Torsten.Sturmwellen.Veith/Wellen_00653.tif 

答案 1 :(得分:0)

找到解决方案:

^(?!\/var\/ftp\/video\/English)(.*\.(?!(doc.?|ppt.?|jpg|tif.?|pdf|DS_Store)$)([^.]+$))