我应该使用什么正则表达式来查找不包含指定字符串的文件名?
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)$
问题是,您在 .
之前使用了 ahead ,而您实际上想要 behind .
^\w+(?<!_min)\.(jpg|gif)$
参见demo at regex101. For reducing backtracking make the \w
quantifier possessive。
我正在尝试使用 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)$
问题是,您在 .
之前使用了 ahead ,而您实际上想要 behind .
^\w+(?<!_min)\.(jpg|gif)$
参见demo at regex101. For reducing backtracking make the \w
quantifier possessive。