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

如何用PHP从指定键值对字符串中提取name与email参数值

解决方案

你原本的正则匹配不生效,是因为匹配规则中写了字符串中不存在的value=前缀,完全匹配错了目标内容,不需要自己手写正则实现,PHP内置函数就可以直接满足需求:

方案1:用内置parse_str实现(推荐)

如果要保留键名中的+不被转为空格,使用如下代码:

$rawStr = "No+Label+name=Aaron+Smith&No+Label+email=aaron.smith@live.co.uk";
// 临时转义键名中的+,避免parse_str默认把+替换为空格
$processedStr = preg_replace_callback('/[^&=]+(?==)/', function($item) {
    return str_replace('+', '%2B', $item[0]);
}, $rawStr);
// 解析查询字符串为关联数组
parse_str($processedStr, $outputArr);

// 调用效果完全符合需求
echo $outputArr['No+Label+name']; // 输出 Aaron Smith
echo $outputArr['No+Label+email']; // 输出 aaron.smith@live.co.uk

如果你允许键名中的+被替换为空格,可以直接简化为一行解析:

parse_str("No+Label+name=Aaron+Smith&No+Label+email=aaron.smith@live.co.uk", $outputArr);
// 调用方式为 echo $outputArr['No Label name'];

方案2:正则实现

如果一定要用正则完成匹配,使用如下代码:

$str = "No+Label+name=Aaron+Smith&No+Label+email=aaron.smith@live.co.uk";
preg_match_all('/([^&=]+)=([^&]*)/', $str, $matches);
$outputArr = [];
foreach ($matches[1] as $index => $key) {
    $outputArr[urldecode($key)] = urldecode($matches[2][$index]);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:36:04