2017-02-19 19 views
0

私は同じPHP preg_matchスクリプトを持っており、同じファイルをチェックしています。今日私のローカルトラックに馬があるかどうかを調べようとしています。私はpreg_last_errorがエラーを表示しないようにしました。preg_matchは1台のサーバーで動作していますが、他のサーバーでは動作していません

$pattern='/<p class=\"clear\" style=\"margin-top:-17px;\">&nbsp;<\/p> --> 

    <h4 class=\"lightgreenbg padding\">/'; 
if (preg_match($pattern, $HTMLcontent)) { echo ("Found races today. <br>"); } else { echo ("No races found."); } 

ザ・$ HTMLcontentは1 server1server2を見つけることができます。これがencoding、php、またはftpの問題であるかどうかは不明です。私は、サーバー1からサーバー2にFTPでデータを送信すると、サーバー2での作業も停止します。しかし、私のPCにダウンロードしてから、FTPサーバー2が正常に動作します。非常に奇妙な。

+1

私はそれがphp' 'のバージョンが原因だと思います。私はしばらく前に同様の問題を抱えていました。 – math2001

+0

あなたの実際の問題には関係ないかもしれませんが、DOMの正規表現を試してみるのではなく、パーサを使うことを検討してください。 – Jan

+0

[同じファイルですが同じ内容ではありません](https://i.stack.imgur.com/p9Z67.png) – revo

答えて

1

これは、サーバーとワークステーションが異なるオペレーティングシステムを使用している場合、行末の違いが原因である可能性があります。 Windows/DOSは\r\nを使用し、linuxはちょうど\nを使用します。

$pattern='/<p class=\"clear\" style=\"margin-top:-17px;\">&nbsp;<\/p> -->\s+<h4 class=\"lightgreenbg padding\">/'; 

それは行末のためではなかった場合は、あなたが実際に定期的に探していません:あなたはこの\s使用してください -

あなたは、正確な空白ではなく、任意の空白文字を照合することによってこの問題を解決することができます式、ちょうどストリング。私は間違いなくstrposとするpreg_match使用していないと言うでしょうはるかに効率的である:

<?php 
$mystring = 'abc'; 
$findme = 'a'; 
$pos = strpos($mystring, $findme); 

// Note our use of ===. Simply == would not work as expected 
// because the position of 'a' was the 0th (first) character. 
if ($pos === false) { 
    echo "The string '$findme' was not found in the string '$mystring'"; 
} else { 
    echo "The string '$findme' was found in the string '$mystring'"; 
    echo " and exists at position $pos"; 
} 
?> 

から:http://php.net/manual/en/function.strpos.php

+0

これはうまくいきました。 \ sについて忘れてしまった。これは間違いなくLinuxとWindowsの違いです。 WindowsのPCに保存したとき、Linuxマシンとは異なる改行を使用していました。私は私の心を失うと思った。ありがとうございました! – Bill

関連する問題