我正在尝试使用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
量词具有所有格。