PHP 7.1正则表达式排除WordPress旧版缩放图片需求
解决PHP 7.1下用preg_grep排除WordPress缩放图的问题
嘿,我完全懂你的痛点——手动区分WordPress缩放图和命名相似的原图确实麻烦,而且还不能用插件重建,只能靠正则来搞定。下面给你一套靠谱的方案,完美适配PHP 7.1:
核心思路
WordPress自动生成的缩放图命名规则是固定的:[原图文件名]-[宽度]x[高度].[后缀],比如sunset-800x600.jpg。我们需要用负向前瞻正则来匹配那些不包含这种缩放标记的文件,再通过preg_grep筛选出结果。
具体实现代码
// 示例文件列表(替换成你的实际文件数组) $imageFiles = [ 'lake-view.jpg', // 原图:保留 'lake-view-1200x800.jpg', // 缩放图:排除 'my-cat-photo.jpg', // 带连字符的原图:保留 'my-cat-photo-400x300.jpg', // 缩放图:排除 'event-2024.jpg', // 含数字但非尺寸格式:保留 'logo.png', // 原图:保留 'logo-512x512.png' // 缩放图:排除 ]; // 正则表达式:匹配不包含 "-数字x数字." 的文件名 $excludeScaledPattern = '/^(?!.*-\d+x\d+\.).+$/'; // 用preg_grep筛选出符合条件的原图 $originalImages = preg_grep($excludeScaledPattern, $imageFiles); // 查看结果 print_r($originalImages);
正则表达式详解
让你明白每个部分的作用,方便后续调整:
^:锚定字符串的开始位置(?!.*-\d+x\d+\.):负向前瞻断言,核心逻辑就在这:.*:匹配任意数量的任意字符(覆盖文件名前半部分)-\d+x\d+:匹配WordPress缩放图的标记:连字符+一串数字+x+一串数字\.:转义后的点(因为正则里的.默认匹配任意字符,这里要匹配文件名里的实际点)- 整个断言的意思是:这个字符串里不存在符合缩放标记的片段
.+$:匹配从断言位置到字符串结尾的所有字符(也就是完整的原图文件名)
边界情况说明
- 如果你的原图里有类似
project-2024x2025.jpg这种带数字x数字但不是尺寸的文件名,这个正则会误判——但这种情况非常少见,WordPress也不会生成这种命名的缩放图。如果真遇到,可以给正则加个后缀限制,比如只匹配图片后缀:/^(?!.*-\d+x\d+\.(jpg|jpeg|png|gif)).+\.(jpg|jpeg|png|gif)$/ - PHP 7.1完全支持这个正则语法,不用担心里版本兼容性问题
内容的提问来源于stack exchange,提问作者CodeMilitant
相关产品推荐
相关产品推荐

