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

What regular expression should I use to find the file name that does not contain the specified string?

我正在尝试使用 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)$

Demo on regex101

问题是,您在 . 之前使用了 ahead ,而您实际上想要 behind .

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

参见demo at regex101. For reducing backtracking make the \w quantifier possessive