题主啊, 你好.
我觉得, 你这个任务, 用不到正则.
为什么呢?
请看里面的搜索结果是什么?
<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;
}
?>
你去phpfiddle 试一下吧, 还行. 做这种工作, xpath方便点.
<?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);
把$rule = '/^[1-9]\d{5}$/';换成
$rule = '/[1-9]\d{5}/';试试
因为,你用了strip_tags.所以,很多内容,都直接合并成“一行”了。再用^,$应该是匹配不到的