如何在PHP中使用preg_match提取响应中Delta数组内容得到r3r4
问题原因
你写的正则/^{Delta=(\[.*\, .*\])}$/使用了^和$限定符,要求整个字符串完全匹配{Delta=[xxx]}格式,但你的实际$response[0]在Delta字段后还有X=alarmOff, Y=heatOn等其他内容,因此完全匹配失败。就算匹配到整个数组内容,也需要二次提取才能拿到内部的r3、r4值,逻辑冗余。
正确实现方案
方案1:单次匹配直接捕获两个值(元素数量固定时推荐)
直接通过捕获组提取两个目标值,一步得到结果:
// 匹配Delta数组内的两个元素 preg_match('/Delta=\[([a-zA-Z0-9]+),\s*([a-zA-Z0-9]+)\]/', $response[0], $matches); // 拼接结果 $result = $matches[1] . $matches[2];
最终$result的值就是你需要的r3r4。
方案2:兼容多元素的通用方案
如果Delta数组内的元素数量不固定,可以先提取整个数组内容再拆分处理:
// 提取[]内的所有内容 preg_match('/Delta=\[(.*?)\]/', $response[0], $matches); // 按逗号拆分后去除每个元素的首尾空格,再拼接 $deltaItems = explode(',', $matches[1]); $result = implode('', array_map('trim', $deltaItems));
内容的提问来源于stack exchange,提问作者kolokasi
相关产品推荐
相关产品推荐

