我应该使用什么正则表达式来查找不包含指定字符串的文件名



我正在尝试使用preg_match函数创建文件夹中的文件列表。但是,我想省略文件名和扩展名之间包含"_min"字符串的文件。文件名应仅由字母数字组成,下划线字符和扩展名应仅为 jpg 和 gif。例如:
desc_125f.jpg ->匹配,
desc#_56.jpg ->不匹配(包含 #(,
bla_bla.gif ->匹配,
bla_bla.png ->不匹配(分机名为 png(,
desc_125f_min.jpg ->不匹配(包含文件名和扩展名之间的_min(,
desc_min256.gif ->匹配(_min不在文件名和扩展名之间(。
正则表达式模式应该如何?

我已经尝试过:^w+(?!_min).(jpg|gif)$但它没有按我的预期工作,因为desc_125f_min.jpg已被匹配。

正则表达式的问题在于w+吸收了所有字符直到.,因此对_min的负面展望总是成功的。您需要将负序前移到正则表达式的开头:

^(?!.*_min.)w+.(jpg|gif)$

正则表达式101演示

问题在于,你在.真正想看的地方之前使用向前

^w+(?<!_min).(jpg|gif)$

请参阅正则表达式 101 中的演示。为了减少回溯,使w量词具有所有格。

最新更新