如何在PHP中使用正则表达式在JSON字符串中找到字符串?

ymdaylpp  于 2023-04-19  发布在  PHP
关注(0)|答案(2)|浏览(90)

我有一个带连字符的字符串:

$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}?

fzsnzjdm

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
)
sdnqo3pr

sdnqo3pr2#

如果结果总是以rec开头,以len..结尾,你可以使用$在结尾查找所有内容,只需要获取JSON片段,然后像往常一样解析JSON。
我得到的正则表达式是这样的:

/^.+rec(.+)len\d+$/
  • ^.+一切都在开始
  • rec从头开始
  • (.+)捕获其间的所有内容
  • len\d+检查末尾的len
  • $/字符串结尾

顺便说一句,为什么在响应中有标题?处理响应应该只给予你字符串形式的正文文本。无论如何,
参见下面的代码片段作为示例(在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));

相关问题