php 類似正則擷取字串匹配內容的簡單方法

來源:互聯網
上載者:User

 類似正則擷取字串匹配內容的簡單方法,方法比較簡單,使用也很方便,功能還很有限

說明:見代碼開始的注釋,有不清楚的地方,可以留言給我,歡迎指錯,提供好方法

本例是以http://www.3444.cc/List/List_4.htm擷取內容頁地址為例的


<?php/*函數canshujiequ($yuanma,$canshustr,$mubiao)說明:功能:類似正則擷取內容,功能比正則簡單,可以說是正則功能的一小部分卻經常用的功能,就是實現萬用字元和自訂的方式擷取匹配的內容,放在數組中參數說明:$yuanma-----要從中擷取內容的字串;$canshustr-----根據$yuanma李德內容規律,設定的字串:可以使用萬用字元(*),包含[參數],[參數是提取的需要資訊;$mubiao---------組合後的字串;類似火車頭採集器的自訂時的設定方法,本函數也是參考火車頭的那部分的設定實現方法:不斷的查詢匹配的位置,以一個為單元,擷取後,字串查詢移到器後開始查詢,直到字串尾部傳回型別:數組,包含匹配的字串*/set_time_limit(0); //迴圈截取函數定義開始function canshujiequ($yuanma,$canshustr,$mubiao){if($yuanma=='')return array();if(strpos($canshustr,'[參數]')==false||strpos($mubiao,'[參數1]')==false){echo '參數或組合字元串格式不對'; return array();}$chaxunwz=0;$canshuarr=array();$canshuarr=explode('[參數]',$canshustr);//echo '參數分割後的數組:';//print_r($canshuarr);//echo '<br/><br/>';$len1=count($canshuarr);$pipeiarr=array();$tpfarr=array();$qianks=0;$qianjs=0;$nowks=0;$nowjs=0;$end=0;$num=0;while(($end==0)&&($chaxunwz<strlen($yuanma))){$mubiaofuben=$mubiao;$feikong=0;for($i=0;($end==0)&&($i<$len1);$i++){if($canshuarr[$i]=='')continue;$feikong++;$tpfarr=explode('(*)',$canshuarr[$i]);$len2=count($tpfarr);$feikongnum=0;for($j=0;($j<$len2)&&($end==0);$j++){if($tpfarr[$j]=='')continue;$feikongnum++;if($chaxunwz>=strlen($yuanma)){$end=1;break;}if(($pipeiwz=strpos($yuanma,$tpfarr[$j],$chaxunwz))!==false){$chaxunwz=$pipeiwz+strlen($tpfarr[$j]);if($feikongnum==1)$nowks=$pipeiwz;$nowjs=$chaxunwz;}else{$end=1;break;}}if($end==0){if($feikong>1){$str=substr($yuanma,$qianjs,$nowks-$qianjs);$mubiaofuben=str_replace('[參數'.($feikong-1).']',$str,$mubiaofuben);//echo '替換[參數'.($feikong-1).']<br/>';}$qianks=$nowks;$qianjs=$nowjs;}else{//echo '沒有匹配了<br/>';break;}}if($end==0){$pipeiarr[]=$mubiaofuben;//echo '第'.($num+1).'條結果:'.$pipeiarr[$num].'<br/>';$num++;}}//echo "最後的匹配數組:";//print_r($pipeiarr);return $pipeiarr;}//迴圈截取函數定義結束//下面是一個測試的例子,擷取網頁源碼,從中匹配電影的內容頁地址$url='http://www.3444.cc/List/List_4.htm';//擷取源碼,用上面的匹配函數獲得需要的內容頁網址$yuanma=file_get_contents($url);$canshustr='<li><a href="/[參數]" target="_blank">';//函數第1個參數,源碼裡德地址形式$mubiaostr='http://www.3444.cc/[參數1]';//第2個參數,組合後的地址$jieguo=canshujiequ($yuanma,$canshustr,$mubiaostr);//返回匹配的數組print_r($jieguo);//列印查看擷取的效果?>




測試效果圖:



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.