preg_match_all - php正则表达式问题
伊谢尔伦
伊谢尔伦 2017-04-10 15:40:04
[PHP讨论组]

如何匹配

$rs='callback( {"client_id":"101223150","openid":"9ECFD84190F7D5D40E013CF84D0979FF"} );';

中openid的9ECFD84190F7D5D40E013CF84D0979FF?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(4)
伊谢尔伦

可以使用正则前瞻

举个例子,需要匹配 <p>Hello world</p> 中的 Hello world,正则表达式可以这么写:(?<=<p>)(.*)(?=</p>)

所以获取 openid 的值可以这样:

<?php
$rs='callback( {"client_id":"101223150","openid":"9ECFD84190F7D5D40E013CF84D0979FF"} );';
$pattern = '/(?<=openid":")(.*)(?=")/';
preg_match($pattern, $rs, $matches);
print_r($matches);

输出:

Array
(
    [0] => 9ECFD84190F7D5D40E013CF84D0979FF
    [1] => 9ECFD84190F7D5D40E013CF84D0979FF
)
ringa_lee
phppreg_match_all('@callback\((.*)\);@', $rs,$matches );
$arr = json_decode($matches[1][0],true);
print_r($arr['openid']);//9ECFD84190F7D5D40E013CF84D0979FF
黄舟

这是一个标准的jsonp格式(json参数+回调函数),一个简单的处理方案是拿出函数callback()取它的参数部分然后作为json解析:

php$rs = 'callback( {"client_id":"101223150","openid":"9ECFD84190F7D5D40E013CF84D0979FF"} );';
$jsonp = [];
preg_match('/callback\((.+)\);/', $rs, $jsonp);
print_r($jsonp);
$result = json_decode($jsonp[1]);
print_r($result); //使用$result->openid访问你需要的数据

输出

Array
(
    [0] => callback( {"client_id":"101223150","openid":"9ECFD84190F7D5D40E013CF84D0979FF"} );
    [1] =>  {"client_id":"101223150","openid":"9ECFD84190F7D5D40E013CF84D0979FF"}
)
stdClass Object
(
    [client_id] => 101223150
    [openid] => 9ECFD84190F7D5D40E013CF84D0979FF
)
高洛峰

代码如下:

php$rs='callback( {"client_id":"101223150","openid":"9ECFD84190F7D5D40E013CF84D0979FF"} );';
$preg = '/openid["|\']:["|\'](\w+)/i';
preg_match($preg,$rs,$result);
echo $result[1];//9ECFD84190F7D5D40E013CF84D0979FF
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号