使用PHP 7.1,我需要一个正则表达式模式,它将排除旧WordPress安装中的所有缩放图像。不幸的是,一些全尺寸图像具有类似的命名法。我需要preg_grep才能使用此功能。
示例图像数组:
[0]=>
string(70) "/wp-content/uploads/2011/05/filename3-1-100x100.png"
[1]=>
string(78) "/wp-content/uploads/2011/05/filename-1-150x150-100x100.png"
[2]=>
string(62) "/wp-content/uploads/2011/05/filename-1.png"
[3]=>
string(68) "/wp-content/uploads/2011/05/filename-100x100.png"
[4]=>
string(76) "/wp-content/uploads/2011/05/filename-150x150-100x100.png"
[5]=>
string(60) "/wp-content/uploads/2011/05/filename.png"
我需要的结果:
/wp-content/uploads/2011/05/filename-1.png
/wp-content/uploads/2011/05/filename.png
我已经尝试过消极的期待:
.*(-\d{1})?(?![-\d{3}x\d{3}]?\.(jpg|png|bmp|gif|ico)
我尝试过负面看法:
.*(?<![-\d{3}x\d{3}]\.(jpg|png|bmp|gif|ico))
我试过否定不需要的字符串:
.*(-\d)?[^-\d{3}x\d{3}]\.(jpg|png|bmp|gif|ico)
在正常情况下,我会使用插件重建新WordPress实例的图像,但是,这个客户端有超过10,000个图像,其中许多图像没有附加到他们的WordPress帖子。这些图像仅用于其社交网络。我必须维护所有旧图像,以便任何传入的链接都不会被破坏,但我还需要重建帖子图像。不幸的是,在导出WordPress网站时,只有附加到帖子的图像包含在WXR rss导出文件中。这可能会导致数千张图像无法计算,并且需要使用插件手动添加它们。
答案 0 :(得分:2)
你在正则表达式中犯了一些错误,就像用圆括号混淆括号一样。括号将定义一个字符类,而括号则打算对一个模式进行分组。否则你可能会找到一个有效的解决方案:
^(?!.*-\d{3}x\d{3}).*\.(jpg|png|bmp|gif|ico)$
PHP代码:
print_r(preg_grep("~^(?!.*-\d{3}x\d{3}).*\.(jpg|png|bmp|gif|ico)$~", $array));