我试过了,但我根本无法用PHP包围正则表达式.我需要一个执行以下操作的正则表达式:
>忽略以双__underscore开头的文件. (例如__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)$).*$)
第3个解决方案(Wiktor评论中建议)
^(?!__|.*thumb\.(?:gif|jpg|png|jpeg))(?=.*\.(?:gif|jpg|png|jpeg)$).*
第4个解决方案(由评论中的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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。