html转换为json字符串,正则表达式的应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kunpeng1987/article/details/74004522

最近在做app,需要做一个查看物流的接口,从第三方去申请物流API,由于申请的是免费的,所以只能返回html(这个有点坑,免费的和收费的区别太大了吧),谁让咱是做技术的,即使是html,也可以把它变成json。首先请求API,获取到一个html如下:

这里写图片描述

$content = '<table width="520px" border="0" cellspacing="0" cellpadding="0" id="showtablecontext" style="border-collapse:collapse;border-spacing:0;"><tbody><tr><td width="163" style="background:#64AADB;border:1px solid #75C2EF;color:#FFFFFF;font-size:14px;font-weight:bold;height:28px;line-height:28px;text-indent:15px;">时间</td><td width="354" style="background:#64AADB;border:1px solid #75C2EF;color:#FFFFFF;font-size:14px;font-weight:bold;height:28px;line-height:28px;text-indent:15px;">地点和跟踪进度</td></tr><tr><td width="163" style="border:1px solid #DDDDDD;font-size:12px;line-height:22px;padding:3px 5px;">2017-06-27 10:09:37</td><td width="354" style="border:1px solid #DDDDDD;font-size:12px;line-height:22px;padding:3px 5px;">深圳市|到件|到深圳市【深圳转运中心】</td></tr><tr><td width="163" style="border:1px solid #DDDDDD;font-size:12px;line-height:22px;padding:3px 5px;">2017-06-27 06:23:50</td><td width="354" style="border:1px solid #DDDDDD;font-size:12px;line-height:22px;padding:3px 5px;">东莞市|发件|东莞市【虎门转运中心】,正发往【深圳转运中心】</td></tr><tr><td width="163" style="border:1px solid #DDDDDD;font-size:12px;line-height:22px;padding:3px 5px;">2017-06-24 20:09:29</td><td width="354" style="border:1px solid #DDDDDD;font-size:12px;line-height:22px;padding:3px 5px;">杭州市|到件|到杭州市【杭州萧山集散仓】</td></tr><tr><td width="163" style="border:1px solid #DDDDDD;font-size:12px;line-height:22px;padding:3px 5px;">2017-06-24 18:35:19</td><td width="354" style="border:1px solid #DDDDDD;font-size:12px;line-height:22px;padding:3px 5px;">杭州市|到件|到杭州市【杭州萧山北分部】</td></tr></tbody></table>';
$pattern = '/<tr><td.*?>(.*?)<\/td><td.*?>(.*?)<\/td><\/tr>/'; //正则表达式,匹配td里面的内容

这句是关键所在,.*? 其中.是匹配除换行符以外的任意字符,*?贪婪模式,重复任意次,但尽可能少重复。

preg_match_all($pattern,$content,$str);//匹配所有符合条件的内容
$times = $str[1];//时间
array_shift($times);//删除不需要的
$contexts = $str[2];//内容
array_shift($contexts);//删除不需要的
$return_data = array();
$data = array_combine($times,$contexts);//以时间为索引,内容为值,组合数组
foreach($data as $key=>$v){
    $return_data[]=array('time'=>$key,'content'=>$v);//再次变换
}
echo json_encode($return_data );

最后得到json字符串:

[
  {
    "time": "2017-06-27 10:09:37",
    "content": "深圳市|到件|到深圳市【深圳转运中心】"
  },
  {
    "time": "2017-06-27 06:23:50",
    "content": "东莞市|发件|东莞市【虎门转运中心】,正发往【深圳转运中心】"
  },
  {
    "time": "2017-06-24 20:09:29",
    "content": "杭州市|到件|到杭州市【杭州萧山集散仓】"
  },
  {
    "time": "2017-06-24 18:35:19",
    "content": "杭州市|到件|到杭州市【杭州萧山北分部】"
  }
]

猜你喜欢

转载自blog.csdn.net/kunpeng1987/article/details/74004522