关于PHP正则提取网页信息

2025-02-24 05:42:57
推荐回答(3个)
回答1:

用 int preg_match( string pattern, string subject [, array matches ] ) 来处理,实现过程我就不写了,没有验环境,下面说下思路。

用$str读入采集结果,preg_match_all("/<[^>]+.+>/", $str,$split_word)分割采集结果,得到数组$split_word,结果应该是这样子的:
$split_word[0]="

  • "
    $split_word[1]=" "
    ……
    然后逐个对数组元素进行查找,首先循环查找条件1 id号:
    preg_match("/id=\d+/i",$split_word[n],$id_value)
    匹配的结果是数组$id_value,类似$id_value[0]="id=xxxxx",如果你要提取纯数字,还要再对这个结果提取一次。
    其余字段提取仿照上面操作,对应的正则表达式:
    链接标题先提取/]+>\w+<\/a>/i, 然后再从结果中提取< /[x80-xff>]{4,}/i (即匹配四个汉字以上,汉字GBK/GB2312编码是:[x80-xff>],UTF-8编码:[x{4e00}-x{9fa5}]+/u,这一点要注意)

    ……

    思路就是这样,比较烦人,没有下一子能就匹配所有信息的正则表达式。

    回答2:

    preg_match_all("/href=\"detailnew.+?id=(.+?)\">(.+?)<\/a>.+?href=\".+?c=(.+?)&d=(.+?)\">(.+?)<\/a>/s", $html, $find); //$html是你采集的内容
    for($i=0; $i $arr_id[] = array($find[1][$i], $find[2][$i]);
    $arr_c[] = $find[3][$i];
    $arr_d[] = array($find[4][$i], $find[5][$i]);
    }
    print_r($arr_id);
    echo '

    ';

    print_r($arr_c);
    echo '

    ';

    print_r($arr_d);

    回答3:

    答案:
    $str = ’‘; //你的内容;

    preg_match_all('|detailnew.jsp\?id=(.*)">(.*).*&c=(.*)&d=(.*)">(.*).*

    驻村干部(.*)<|isU',$str,$main);
    $id_array = $main[1];
    $id_link_txt_array = $main[2];
    $c_array = $main[3];
    $d_array = $main[4];
    $c_d_link_txt_array = $main[5];
    $date_array = $main[6];