我已经尝试过了,但我根本无法理解 PHP 中的正则表达式。我需要一个执行以下操作的正则表达式:
- 忽略以双下划线开头的文件。 (例如 __file.jpg)
- 忽略以“thumb”结尾的文件。 (例如 somethumb.jpg 或 thumb.jpg)
- 忽略除 gif|jpg|png|jpeg 之外的所有文件类型
我现在有以下内容,似乎满足了#2 和#3,但没有满足#1:
preg_match(/(?<!thumb)\.(gif|jpg|png|jpeg)$/i, $file)
非常感谢任何帮助!
最佳答案
如果我对第三点的理解正确,那就意味着它应该以所有这些文件扩展名结尾。考虑到这一点,以下将起作用
第一个解决方案
(?!^__|.*thumb\.(gif|jpg|png|jpeg))(^.*)(?=\.(gif|jpg|png|jpeg)$)
寻求有效的解决方案
第二个解决方案
^(?!__|.*thumb\.(?:gif|jpg|png|jpeg))(.*(?=\.(?:gif|jpg|png|jpeg)$).*$)
第三个解决方案(由 Wiktor 在评论中建议)
^(?!__|.*thumb\.(?:gif|jpg|png|jpeg))(?=.*\.(?:gif|jpg|png|jpeg)$).*
第四个解决方案(由 Casimir 在评论中建议)
^(?!__)(?:[^.\n]*\.)*+(?<!thumb\.)(?:jpe?g|png|gif)$
PHP 代码
$re = "/^(?!__|.*thumb\\.(?:gif|jpg|png|jpeg))(?=.*\\.(?:gif|jpg|png|jpeg)$)(.*)/m";
$str = "__abcd.jpg\nthumbabcd.gif\nthumbabcdthumb.jpg\nthumbs.jpg\nsomethumb.jpg\nthumb.jpg\nabcd.jpg\nabcd.jps";
preg_match_all($re, $str, $matches);
关于PHP 正则表达式忽略以双下划线开头的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36776571/