您好,欢迎访问一九零五行业门户网

preg_match_all - php正则表达式问题

如何匹配
$rs='callback( {client_id:101223150,openid:9ecfd84190f7d5d40e013cf84d0979ff} );';

中openid的9ecfd84190f7d5d40e013cf84d0979ff?
回复内容: 如何匹配
$rs='callback( {client_id:101223150,openid:9ecfd84190f7d5d40e013cf84d0979ff} );';

中openid的9ecfd84190f7d5d40e013cf84d0979ff?
可以使用正则前瞻
举个例子,需要匹配 hello world
中的 hello world,正则表达式可以这么写:(?)(.*)(?=
)所以获取 openid 的值可以这样:
9ecfd84190f7d5d40e013cf84d0979ff)
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
其它类似信息

推荐信息