You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用preg_replace提取链接id并替换另一链接的对应id值

用preg_replace提取并替换URL中的ID参数

嘿,我来帮你搞定这个URL参数替换的需求~我们可以分两步实现:先从第一个链接里提取目标ID,再用这个ID替换第二个链接里的原有ID,下面是具体的代码实现和解释:

步骤1:从链接1提取ID值

首先我们需要把链接1里的ID数字抓出来,用preg_match配合正则就能轻松搞定:

// 原始链接1
$link1 = 'https://m.intl.example.com/detail/detail.html?id=562858877982&abtest=8&rn=ab2d6eacbccdbd3d59b70b38f26c496d&sid=403ef38782392a0c5298d9d7278d9005';

// 正则匹配提取ID:匹配id=后面的一串数字,用捕获组存起来
preg_match('/id=(\d+)/', $link1, $matches);
$targetId = $matches[1] ?? ''; // 加个默认值,避免提取失败报错

这里的正则/id=(\d+)/会精准定位id=后面的数字序列,把我们要的ID存到$matches数组的第1位。

步骤2:用提取到的ID替换链接2中的原有ID

接下来用preg_replace把链接2里的旧ID替换成刚拿到的目标ID:

// 原始链接2
$link2 = 'https://item.example.com/item.htm?spm=a230r.1.14.33.a8e813ceFcDRaX&id=522804915538&ns=1&abbucket=9';

// 替换ID参数:匹配id=+数字的组合,替换成id=目标ID
$newLink2 = preg_replace('/id=\d+/', "id={$targetId}", $link2);

// 输出最终结果
echo $newLink2;

这个正则/id=\d+/会匹配链接2里的旧ID部分,直接替换成我们需要的新ID格式。

更紧凑的写法(二合一)

如果你想少写几行代码,也可以把提取和替换合并成嵌套的preg_replace(可读性稍弱,但功能一样):

$link1 = 'https://m.intl.example.com/detail/detail.html?id=562858877982&abtest=8&rn=ab2d6eacbccdbd3d59b70b38f26c496d&sid=403ef38782392a0c5298d9d7278d9005';
$link2 = 'https://item.example.com/item.htm?spm=a230r.1.14.33.a8e813ceFcDRaX&id=522804915538&ns=1&abbucket=9';

// 内层preg_replace提取ID,外层替换链接2的ID
$newLink2 = preg_replace('/id=\d+/', 'id=' . preg_replace('/.*id=(\d+).*/', '$1', $link1), $link2);

内层的preg_replace('/.*id=(\d+).*/', '$1', $link1)会直接返回链接1的ID值,外层再用这个值替换链接2的旧ID,一步到位~

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

火山引擎 最新活动