本人小白,想通过百度邮编搜索截取一个地址的邮编,在自己的网站空间里放了个php脚本。
因为要求不是很高,试图通过正则匹配找到第一组“首位不为0的六位数字”,作为结果输出,但是不管怎么尝试,得到的始终是一个空数组……
正则表达式是我从网上找的,也是过不同的形式,但是始终都得不到任何值
<?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);
$clear_result = strip_tags($search_result);
echo mb_detect_encoding($search_result);
echo("</br>");
echo($clear_result);
echo("</br>");
$zipcodes = search_for_zipcodes($clear_result);
print_r($zipcodes);
function search_for_zipcodes($test) {
$rule = '/^[1-9]\d{5}$/';
preg_match_all($rule,$test,$result);
return $result;
} ?>
mb_detect_encoding($search_result)
,写这一句是想看看返回回来的页面的编码,但是这个函数似乎也得不到任何结果……
如果漏洞百出烦请诸位大神耐心指教,本人真的是小白一只……
题主啊, 你好.
我觉得, 你这个任务, 用不到正则.
为什么呢?
请看里面的搜索结果是什么?
好完整的结果, 这已经是一个列表了.
因为具体还没有看, 一会我来告诉你怎么处理.我先php试一下.
http://phpfiddle.org/
你去phpfiddle 试一下吧, 还行. 做这种工作, xpath方便点.
把$rule = '/^[1-9]\d{5}$/';换成
$rule = '/[1-9]\d{5}/';试试
因为,你用了strip_tags.所以,很多内容,都直接合并成“一行”了。再用^,$应该是匹配不到的