PHP正則表達式的匹配
來源:程序員人生 發布時間:2015-03-12 09:12:48 閱讀次數:2982次
今天主要的任務就是對新聞、研究報告等咨詢的最近上傳時間和本地的時間進行對照,比較1下是不是超過1個小時,然后我對此進行了php的編程
剛開始,我本來以為主頁中就有所需要處理的文字的信息,但是我找了好久就是沒有發現所要查找的文字的信息,剛開始的時候我并沒有發現然后1直在那傻傻地用正則表達式處理html的源代碼,后來我發現原來是我自己的問題,原來html源代碼中其實不包括新聞的代碼。然后我就用chrome對頁面進行查找,終究找到了新聞頁面來源的url。然后對url進行處理。
在對url進行處理的時候,我就直接用正則表達式處理,可是在處理的時候出現了各種各樣的問題。首先時間字符串的長度隨著時間的變化可能會變得不1樣,所以1開始我其實不知道怎樣去處理,然后嘗試了好久,后來,我嘗試用.*的方式對文字進行匹配,可是由于在php中默許采取的是貪婪匹配,所以1匹配就是匹配所有的東西,然后我就對此進行搜索,查找解決的方法,找了很久都不能找到。
后來,我問了1下我的1個同學,他和我說了正則表達式默許是采取貪婪匹配的方式,而可以改變模式為非貪婪匹配就能夠解決這個問題。
打個比方說,有1段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>了
然后我終究解決了問題
<?php
/*判斷最近更新時間是不是大于1個小時函數*/
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,⑵);/*獲得最新的網頁更新時間*/
$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);
}
?>
http://zhidao.baidu.com/question/110658951.html?qq-pf-to=pcqq.c2c
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈