PHP正則表達(dá)式的匹配
來源:程序員人生 發(fā)布時(shí)間:2015-03-12 09:12:48 閱讀次數(shù):2987次
今天主要的任務(wù)就是對新聞、研究報(bào)告等咨詢的最近上傳時(shí)間和本地的時(shí)間進(jìn)行對照,比較1下是不是超過1個(gè)小時(shí),然后我對此進(jìn)行了php的編程
剛開始,我本來以為主頁中就有所需要處理的文字的信息,但是我找了好久就是沒有發(fā)現(xiàn)所要查找的文字的信息,剛開始的時(shí)候我并沒有發(fā)現(xiàn)然后1直在那傻傻地用正則表達(dá)式處理html的源代碼,后來我發(fā)現(xiàn)原來是我自己的問題,原來html源代碼中其實(shí)不包括新聞的代碼。然后我就用chrome對頁面進(jìn)行查找,終究找到了新聞頁面來源的url。然后對url進(jìn)行處理。
在對url進(jìn)行處理的時(shí)候,我就直接用正則表達(dá)式處理,可是在處理的時(shí)候出現(xiàn)了各種各樣的問題。首先時(shí)間字符串的長度隨著時(shí)間的變化可能會變得不1樣,所以1開始我其實(shí)不知道怎樣去處理,然后嘗試了好久,后來,我嘗試用.*的方式對文字進(jìn)行匹配,可是由于在php中默許采取的是貪婪匹配,所以1匹配就是匹配所有的東西,然后我就對此進(jìn)行搜索,查找解決的方法,找了很久都不能找到。
后來,我問了1下我的1個(gè)同學(xué),他和我說了正則表達(dá)式默許是采取貪婪匹配的方式,而可以改變模式為非貪婪匹配就能夠解決這個(gè)問題。
打個(gè)比方說,有1段html:<div>asdef<em>ccda</em>aae<br>sdc</div><div>asdef<em>dfge</em><br>sdc</div>。
我想通過preg_match_all利用規(guī)則
<div>s*<br>
將<div>asdef<em>ccda</em>aae<br>匹配出來,但是PHP好像并沒有非貪婪模式的選項(xiàng),致使匹配出來的是內(nèi)容是
<div>asdef<em>ccda</em>aae<br>sdc</div><div>asdef<em>dfge</em>,由于貪婪模式匹配到了后面的<br>了
/
正則/U 參數(shù)U,用書上的原話是,不再貪婪
然后我終究解決了問題
<?php
/*判斷最近更新時(shí)間是不是大于1個(gè)小時(shí)函數(shù)*/
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,⑵);/*獲得最新的網(wǎng)頁更新時(shí)間*/
$systime=date("Y-m-d H:i:s");/*獲得系統(tǒng)時(shí)間*/
if(strtotime($systime)-strtotime($time)>=3600){/*比較系統(tǒng)時(shí)間是不是大于最近更新時(shí)間1小時(shí),如果是則毛病,如果不是則正確*/
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
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈