PHPRegex的匹配
今天主要的任務就是對新聞、研究報告等諮詢的最近上傳時間和本地的時間進行對比,比較一下是否超過1個小時,然後我對此進行了php的編程
剛開始,我本來以為首頁中就有所需要處理的文字的資訊,但是我找了好久就是沒有發現所要尋找的文字的資訊,剛開始的時候我並沒有發現然後一直在那傻傻地用Regex處理html的原始碼,後來我發現原來是我自己的問題,原來html原始碼中並不包含新聞的代碼。然後我就用chrome對頁面進行尋找,終於找到了新聞頁面來源的url。然後對url進行處理。
在對url進行處理的時候,我就直接用Regex處理,可是在處理的時候出現了各種各樣的問題。首先時間字串的長度隨著時間的變化可能會變得不一樣,所以一開始我並不知道怎麼去處理,然後嘗試了好久,後來,我嘗試用.*的方式對文字進行匹配,可是因為在php中預設採用的是貪婪匹配,所以一匹配就是匹配所有的東西,然後我就對此進行搜尋,尋找解決的方法,找了很久都不能找到。
後來,我問了一下我的一個同學,他和我說了Regex預設是採用貪婪匹配的方式,而可以改變模式為非貪婪匹配就可以解決這個問題。
打個比方說,有一段html:<div>asdef<em>ccda</em>aae<br>sdc</div><div>asdef<em>dfge</em><br>sdc</div>。我想通過preg_match_all利用規則<div>\s*<br>將<div>asdef<em>ccda</em>aae<br>匹配出來,但是PHP好像並沒有非貪婪模式的選項,導致匹配出來的是內容是<div>asdef<em>ccda</em>aae<br>sdc</div><div>asdef<em>dfge</em>,因為貪婪模式比對到了後面的<br>了
/正則/U 參數U,用書上的原話是,不再貪婪
然後我終於解決了問題
<?php/*判斷最新動向時間是否大於一個小時函數*/function limittimeindex($url){$info=file_get_contents($url);/*擷取url的頁面*/preg_match('/date.*\",/U',substr($info,0),$m,PREG_OFFSET_CAPTURE);/*正則匹配字串*/$time=substr($m[0][0],7,-2);/*擷取最新的網頁更新時間*/$systime=date("Y-m-d H:i:s");/*擷取系統時間*/if(strtotime($systime)-strtotime($time)>=3600){/*比較系統時間是否大於最新動向時間1小時,如果是則錯誤,如果不是則正確*/echo "this is false<br>";}else{echo "this is true<br>";}echo $time,"<br>";echo $systime;}echo "<form method='POST' action=''><input type='text' name='url' value=''><input type='submit' value='submit'></form>";if(isset($_POST['url']) && $_POST['url']!=''){$url2=$_POST['url'];limittimeindex($url2);}?>