PHP 正規表現マッチング
今日の主なタスクは、ニュース、調査レポート、その他の問い合わせの最新のアップロード時間を現地時間と比較し、1 時間を超えているかどうかを比較し、それに対して PHP を実行することです。
最初、ホームページに処理が必要なテキストに関する情報があるのかと思いましたが、長時間探しましたが、探しているテキストに関する情報は見つかりませんでした。最初はそれが見つからず、愚かにも正規表現を使用して html ソースコードを処理していましたが、後でそれが私自身の問題であることがわかりました。html ソースコードにはニュースコードが含まれていなかったことがわかりました。その後、Chrome を使用してページを検索し、最終的にニュース ページのソースの URL を見つけました。次に、URL を処理します。
URLを処理する際、正規表現を直接使って処理していたのですが、処理中に様々な問題が発生しました。まず、時間の変化に応じて時刻文字列の長さが異なる可能性があるため、最初はどう対処すればよいのかわからず、長い間試しました。その後、.*を使用してテキストを一致させてみました。 , しかし、PHPでは貪欲一致がデフォルトで採用されているため、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>了
/正则/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);}?>
http://zhidao .baidu.com/question/110658951.html?qq-pf-to=pcqq.c2c