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

PHP中替换域名时如何排除图片扩展名?

域名替换解决方案(排除图片链接)

现有代码问题分析

原代码使用str_replace进行粗暴替换,存在以下问题:

  • 无差别替换所有example.com,包括图片链接中的域名,违反排除规则
  • 错误删除图片扩展名,而非保留原链接
  • 处理www.的逻辑会破坏带图片扩展名的www.example.com结构

正确实现代码

$body = ' www.example.com, example.com, example.com/hello.html, example.com/logo.png, example.com/yourbaby.php , example.com/newimage.jpg, www.example.com/newimage.jpg';

$oldDomain = 'example.com';
$newDomain = 'sample.com';
$excludeExtensions = ['png', 'jpg', 'jpeg'];

// 构建正则:匹配包含目标域名的链接,排除结尾为指定图片扩展名的情况
$pattern = '/(https?:\/\/)?((?:[a-zA-Z0-9-]+\.)?)' . preg_quote($oldDomain, '/') . '(?!.*\.(?:' . implode('|', $excludeExtensions) . '))/i';

// 回调替换:保留协议、子域名,仅替换主域名
$body = preg_replace_callback($pattern, function($matches) use ($newDomain) {
    $protocol = $matches[1] ?? '';
    $subdomain = $matches[2] ?? '';
    return $protocol . $subdomain . $newDomain;
}, $body);

echo $body;

代码逻辑说明

  1. 正则表达式:

    • (https?:\/\/)?:可选匹配http/https协议前缀
    • ((?:[a-zA-Z0-9-]+\.)?):可选匹配子域名(如www.、subdomain.)
    • preg_quote($oldDomain, '/'):转义域名中的特殊字符,避免正则语法冲突
    • (?!.*\.(png|jpg|jpeg)):负向预查,确保匹配到的域名后不会出现图片扩展名,实现排除规则
  2. 回调替换:
    保留匹配到的协议和子域名,仅将example.com替换为sample.com,精准符合需求中的替换规则。

输出结果

sample.com, sample.com, sample.com/hello.html, example.com/logo.png, sample.com/yourbaby.php , example.com/newimage.jpg, www.example.com/newimage.jpg

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:51:09