我有一个带连字符的字符串:
$str = `Res TP/1.1 101 Switching Protocols Upgrade: websocket Sec-WebSocket-Version: 13 Connection: Upgrade Sec-WebSocket-Accept: dlnHlWqQ4h57DuALMOjKJmxbNn8= Server: workerman/4.1.9 rec{"result":1}len14`
如何从这个字符串中提取子字符串{“result”:1}?
fzsnzjdm1#
如果字符串中只有1个JSON块(没有其他{}符号)
$str = 'Res TP/1.1 101 Switching Protocols Upgrade: websocket Sec-WebSocket-Version: 13 Connection: Upgrade Sec-WebSocket-Accept: dlnHlWqQ4h57DuALMOjKJmxbNn8= Server: workerman/4.1.9 rec{"result":1}len14'; $pattern = '[{(.*)}]'; if (preg_match($pattern, $str, $matches)) { print_r($matches); } print_r(json_decode($matches[0]));
结果是
> Array ( [0] => {"result":1} [1] => "result":1 )
所以$matches[0]包含了你的JSON数据,可以通过解码来创建一个对象
stdClass Object ( [result] => 1 )
sdnqo3pr2#
如果结果总是以rec开头,以len..结尾,你可以使用$在结尾查找所有内容,只需要获取JSON片段,然后像往常一样解析JSON。我得到的正则表达式是这样的:
rec
len..
$
/^.+rec(.+)len\d+$/
^.+
(.+)
len\d+
$/
顺便说一句,为什么在响应中有标题?处理响应应该只给予你字符串形式的正文文本。无论如何,参见下面的代码片段作为示例(在JavaScript中是的,但在这种情况下工作类似):
var resultString = 'Res TP/1.1 101 Switching Protocols\ Upgrade: websocket\ Sec-WebSocket-Version: 13\ Connection: Upgrade\ Sec-WebSocket-Accept: dlnHlWqQ4h57DuALMOjKJmxbNn8=\ Server: workerman/4.1.9\ \ rec{\"result\":1}len14'; resultString = resultString.replace(/^.+rec(.+)len\d+$/, '$1'); console.log("found string: ", resultString); console.log("parsed JSON: ", JSON.parse(resultString));
2条答案
按热度按时间fzsnzjdm1#
如果字符串中只有1个JSON块(没有其他{}符号)
结果是
所以$matches[0]包含了你的JSON数据,可以通过解码来创建一个对象
sdnqo3pr2#
如果结果总是以
rec
开头,以len..
结尾,你可以使用$
在结尾查找所有内容,只需要获取JSON片段,然后像往常一样解析JSON。我得到的正则表达式是这样的:
^.+
一切都在开始rec
从头开始(.+)
捕获其间的所有内容len\d+
检查末尾的len$/
字符串结尾顺便说一句,为什么在响应中有标题?处理响应应该只给予你字符串形式的正文文本。无论如何,
参见下面的代码片段作为示例(在JavaScript中是的,但在这种情况下工作类似):