在我获取的一段HTML内容中,有以下内容很多条:<tr><td class="cols01"><span class="price">&yen;710 </span> 
<span class="tax">经济舱 </span><br /><span method="loadding" class="" style="display:none"></span><a href="javascript:void(0)" method="moreflight" itemid="1" flightNo="CA1559" flightclass="Y"  datacache="0" >所有舱位</a><span method="spanMore" itemid="1" class="flight_down"></span></td><td>.....</td>......</tr><tr><td class="cols01"><span class="price">&yen;810 </span> 
<span class="tax">经济舱 </span><br /><span method="loadding" class="" style="display:none"></span><a href="javascript:void(0)" method="moreflight" itemid="1" flightNo="MA1578" flightclass="Y"  datacache="0" >所有舱位</a><span method="spanMore" itemid="1" class="flight_down"></span></td><td>.....</td>......</tr>我写了以下代码来提取上面的红色部分:$html = preg_replace('/>(\s+)/','>',$html);
$html = preg_replace('/(\s+)</','<',$html);
$html = str_replace("\r\n",'',$html);
$html = str_replace("\t",'',$html);
$result=array();
$lowerPrice = array();preg_match_all('~<tr><td class="cols01"><span class="price">&yen;(.*?)</span><span class="tax">(.*?)</span><br/><span method="loadding" class="" style="display:none"></span><a href="javascript:void\(0\)" method="moreflight" itemid="1" flightNo="(.*?)" flightclass="Y"  datacache="0" >(.*?)</a><span method="spanMore" itemid="1" class="flight_down"></span></td>~is',$html,$data);foreach($data[1] as $key=>$item){
    $result[$key]["price"]=$item;
}
foreach($data[3] as $key=>$item){
    $result[$key]["flyno"]=$item;
}
print_r($result);
但是却得不到。求dingsongtao大哥赐教! 谢谢

解决方案 »

  1.   

    用这个正则<tr><td class="cols01"><span class="price">&yen;(.*?)</span><span class="tax">(.*?)</span><br /><span method="loadding" class="" style="display:none"></span><a href="javascript:void\(0\)" method="moreflight" itemid="1" flightNo="(.*?)" flightclass="Y" datacache="0" >(.*?)</a><span method="spanMore" itemid="1" class="flight_down"></span></td>
      

  2.   

    //比较傻的办法,$str = str_replace(array("\r", "\n", ' '), '', $str);
    echo htmlspecialchars($str) . '<br /><br />';
    preg_match_all("'<tr><td class=\"cols01\"><span class=\"price\">&yen;(.*?)</span><span class=\"tax\">(.*?)</span><br/><span method=\"loadding\" class=\"\" style=\"display:none\"></span><a href=\"javascript:void\(0\)\" method=\"moreflight\" itemid=\"1\" flightNo=\"(.*?)\" flightclass=\"Y\"  datacache=\"0\" >(.*?)</a><span method=\"spanMore\" itemid=\"1\" class=\"flight_down\"></span></td>'isx",$str,$data);print_r($data);
      

  3.   

    哦,原来的应该是$html,,,,我这弄成了$str,测试注意下,,,,
      

  4.   


    $html = '<tr><td class="cols01"><span class="price">&yen;710 </span>  
    <span class="tax">经济舱 </span><br /><span method="loadding" class="" style="display:none"></span><a href="javascript:void(0)" method="moreflight" itemid="1" flightNo="CA1559" flightclass="Y" datacache="0" >所有舱位</a><span method="spanMore" itemid="1" class="flight_down"></span></td><td></td></tr><tr><td class="cols01"><span class="price">&yen;810 </span>  
    <span class="tax">经济舱 </span><br /><span method="loadding" class="" style="display:none"></span><a href="javascript:void(0)" method="moreflight" itemid="1" flightNo="MA1578" flightclass="Y" datacache="0" >所有舱位</a><span method="spanMore" itemid="1" class="flight_down"></span></td><td></td></tr>
    ';$html = preg_replace('/>(\s+)/','>',$html);
    $html = preg_replace('/(\s+)</','<',$html);
    $html = preg_replace('/(\s+)/',' ',$html);
    $html = str_replace("\r\n",'',$html);
    $html = str_replace("\t",'',$html);
    echo $html;
    echo "<pre>";
    $result=array();
    preg_match_all('~<tr><td class="cols01"><span class="price">&yen;(.*?)</span><span class="tax">(.*?)</span>~is',$html,$data);
    foreach($data[1] as $key=>$item){
    $result[$key]["money"]=$item;
    }
    foreach($data[2] as $key=>$item){
    $result[$key]["tax"]=$item;
    }preg_match_all('~<a[^>]*?href="javascript:void\(0\)"[^>]*?flightNo="(.*?)"[^>]*?>所有舱位</a>~is',$html,$data);
    foreach($data[1] as $key=>$item){
    $result[$key]["flightNo"]=$item;
    }
    print_r($result);
      

  5.   

    错了,是我在<br />加了一个空格,下面那个删掉了一个空格,我用红色标识出来的,你晕毛啊,我这里是可以的