2017-02-19 112 views
0

我有相同的PHP preg_match腳本,檢查相同的文件,在兩臺Linux服務器上,他們不會導致相同的方式(相同的PHP版本)。試着檢查我的當地賽道上是否有馬匹。我試過preg_last_error顯示沒有錯誤。preg_match正在一臺服務器上工作,但沒有其他

$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可以發現一個server1server2。不知道這是編碼,PHP還是FTP問題。當我將數據從服務器1 FTP到服務器2時,它也停止在服務器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 -

你可以通過匹配任何空白,而不是確切的空白解決這個問題表達式,只是一個字符串。所以我會說絕對不使用的preg_match作爲strpos效率要高得多:

<?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

相關問題