PHP preg_replace URL 模式

PHP preg_replace URL pattern

我有以下 URL 结构:

http://website.com/images/folder1/folder2/123456/x500x1000_2x_ImageName.jpg

我需要从图像名称中删除裁剪分辨率 "x500x1000_2x_",如下所示:

http://website.com/uploads/folder1/folder2/123456/ImageName.jpg

我尝试了很多东西:

$img = preg_replace('/\[x](\d+)[x](\d+)[_2x_]\.*/', '', $img);
$img = preg_replace('/[x]\d[x]\d[_2x_]\.*/', '', $img);
$img = preg_replace('/\/\[x]+\d+[x]+\d+\D+\d\.*/', '', $img);

我真的不擅长preg_replace,有谁能帮帮我吗?

这应该适合你:

(这里我只是把basename() of the url with preg_replace(). At the end I just concatenate the url again with dirname()x\d+x\d+_\d+x_替换在一起)

<?php

    $img = "http://website.com/images/folder1/folder2/123456/x500x1000_2x_ImageName.jpg";
    echo $img = dirname($img) . "/" . preg_replace("/x\d+x\d+_\d+x_/", "", basename($img));

?>

输出:

http://website.com/images/folder1/folder2/123456/ImageName.jpg

正则表达式解释:

x\d+x\d+_\d+x_
  • x 按字面匹配字符 x(区分大小写)
  • \d+匹配一个数字[0-9]
    • 量词:+一次到无限次之间,尽可能多次,按需回馈[贪婪]
  • x 按字面匹配字符 x(区分大小写)
  • \d+匹配一个数字[0-9]
    • 量词:+一次到无限次之间,尽可能多次,按需回馈[贪婪]
  • _ 字面上匹配字符 _
  • \d+匹配一个数字[0-9]
    • 量词:+一次到无限次之间,尽可能多次,按需回馈[贪心]
  • x_ 按字面匹配字符 x_(区分大小写)