如何用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
相关产品推荐
相关产品推荐

