欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php抓取百度邮编搜索结果,应改如何写正则表达式?

程序员文章站 2022-06-08 19:42:43
...
本人小白,想通过百度邮编搜索截取一个地址的邮编,在自己的网站空间里放了个php脚本。
因为要求不是很高,试图通过正则匹配找到第一组“首位不为0的六位数字”,作为结果输出,但是不管怎么尝试,得到的始终是一个空数组……
正则表达式是我从网上找的,也是过不同的形式,但是始终都得不到任何值
");
echo($clear_result);
echo("");
$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脚本。
因为要求不是很高,试图通过正则匹配找到第一组“首位不为0的六位数字”,作为结果输出,但是不管怎么尝试,得到的始终是一个空数组……
正则表达式是我从网上找的,也是过不同的形式,但是始终都得不到任何值

");
echo($clear_result);
echo("");
$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),写这一句是想看看返回回来的页面的编码,但是这个函数似乎也得不到任何结果……

如果漏洞百出烦请诸位大神耐心指教,本人真的是小白一只……

题主啊, 你好.

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

为什么呢?

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

        
邮编 行政区域
250102 山东省 济南市 历下区 经十路双号2218-5150
250102 山东省 济南市 历下区 经十东路双号33188-33688
250102 山东省 济南市 历下区 经十路单号177-3799
250102 山东省 济南市 历下区 旅游路港沟水利站机关公寓

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

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

  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方便点.

(\d+)(.*?)@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.所以,很多内容,都直接合并成“一行”了。再用^,$应该是匹配不到的

相关标签: php 正则表达式