You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助编写PHP preg_replace正则,替换JSON中不一致的上传路径值

JSON字符串中批量替换WordPress上传路径的正则方案

问题分析

你之前用的正则#/wp-content/uploads/sites/(.*?)/#i因使用非贪婪匹配.*?,仅匹配到sites/后的第一个斜杠就停止,导致后续路径直接拼接在替换值后,出现类似/wp-content/uploads/sites/178/2023/032022/06/banner-swx.jpg的错误结果。

解决方案

需要调整正则逻辑,精准匹配到图片文件名前的最后一个斜杠,确保替换整个目标目录路径。结合JSON字符串的特性(路径被引号包裹),使用以下方案:

正则表达式

#/wp-content/uploads/sites/.*?/(?=[^/"]+")#i

代码示例

// 获取WordPress上传目录URL
$replace = wp_upload_dir()['url'];
// 构建匹配规则:匹配JSON中图片路径的完整目录部分(直到文件名前的斜杠)
$pattern = '#/wp-content/uploads/sites/.*?/(?=[^/"]+")#i';
// 执行替换,在替换值后添加斜杠以保持路径结构完整
$jsondata = preg_replace($pattern, $replace . '/', $jsondata);

正则规则说明

  • /wp-content/uploads/sites/:匹配路径的固定开头片段
  • .*?/:非贪婪匹配任意字符,直到遇到目标路径的最后一个斜杠
  • (?=[^/"]+"):正向预查,确保后续内容是不含斜杠和引号的文件名,直到闭合引号,避免误匹配JSON中的其他内容

纯路径场景适配

如果处理的是不含引号的纯路径字符串,可简化正则为:

#/wp-content/uploads/sites/.*?/(?=[^/]+$)#i

此时预查规则改为匹配到字符串结尾的文件名,同样能精准定位最后一个斜杠。

内容的提问来源于stack exchange,提问作者Nadal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 03:35:26