发布于 1970-01-01 08:00
  • 3 个回答
    • 题主啊, 你好.

      我觉得, 你这个任务, 用不到正则.

      为什么呢?

      请看里面的搜索结果是什么?

              <table class="table-list" cellspacing="0"><tr><th class="head-postcode">邮编</th><th class="head-region">行政区域</th></tr><tr><td>250102</td><td><em>山东省</em> <em>济南市</em> <em>历下区</em> 经十路双号2218-5150</td></tr><tr><td>250102</td><td><em>山东省</em> <em>济南市</em> <em>历下区</em> 经十东路双号33188-33688</td></tr><tr><td>250102</td><td><em>山东省</em> <em>济南市</em> <em>历下区</em> 经十路单号177-3799</td></tr><tr><td>250102</td><td><em>山东省</em> <em>济南市</em> <em>历下区</em> 旅游路港沟水利站机关公寓</td></tr></table> 
      

      好完整的结果, 这已经是一个列表了.

      因为具体还没有看, 一会我来告诉你怎么处理.我先php试一下.

        <?php
      
      //有单独邮编的网址
      $url = 'http://opendata.baidu.com/post/s?wd=%C9%BD%CE%F7&p=mini&rn=20';  
      
      // 没有单独邮编的网址
      //$url= 'http://opendata.baidu.com/post/s?wd=%C9%BD%B6%AB%CA%A1%BC%C3%C4%CF%CA%D0%C0%FA%CF%C2%C7%F8%C6%BD%B0%B2%BA%FA%CD%AC&p=mini&rn=20';
      
      
      // xpath 解析文档
      $dom = new DOMDocument;
      libxml_use_internal_errors(TRUE);
      $dom->loadHTMLFile($url);
      libxml_clear_errors();
      $xPath = new DOMXPath($dom);
      
      //起作用的语句
      $trs = $xPath->query('//li/a/text()|//tr/td');
      
      //输出结果
      foreach($trs as $tr) {
           $str= $tr->nodeValue;
      
          if(strlen($str)>6){
          $str =  array_pop( explode(' ', $str));
      
          }
          echo $str;
          break;
      }
      
      
      
      ?>
      

      http://phpfiddle.org/

      你去phpfiddle 试一下吧, 还行. 做这种工作, xpath方便点.

      2022-12-01 11:23 回答
    • <?php
      $final_url = 'http://opendata.baidu.com/post/s?wd=%C9%BD%B6%AB%CA%A1%BC%C3%C4%CF%CA%D0%C0%FA%CF%C2%C7%F8&p=mini&rn=20';
      $search_result = file_get_contents($final_url);
      $search_result = iconv('gbk', 'utf-8', $search_result);
      preg_match_all("@<td>(\d+)</td><td>(.*?)</td></tr>@is", $search_result, $match);
      $area = array_map("strip_tags", $match[2]);
      print_r($match[1]);
      print_r($area);
      
      2022-12-01 11:23 回答
    • 把$rule = '/^[1-9]\d{5}$/';换成
      $rule = '/[1-9]\d{5}/';试试
      因为,你用了strip_tags.所以,很多内容,都直接合并成“一行”了。再用^,$应该是匹配不到的

      2022-12-01 11:23 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有