我有相同的php preg_match脚本,检查同一个文件,在两个Linux服务器上它们不会产生相同的方式(相同的php版本)。试着检查我当地赛道上是否有马匹。我试过preg_last_error显示没有错误。
$pattern='/<p class=\"clear\" style=\"margin-top:-17px;\"> <\/p> -->
<h4 class=\"lightgreenbg padding\">/';
if (preg_match($pattern, $HTMLcontent)) { echo ("Found races today. <br>"); } else { echo ("No races found."); }
$ HTMLcontent可以找到一个server1和server2。不确定这是编码,php还是ftp问题。当我将数据从服务器1 FTP到服务器2时,它也停止在服务器2上工作。但是当我将它下载到我的PC然后FTP服务器2工作正常。很奇怪。
答案 0 :(得分:1)
如果您的服务器和工作站使用不同的操作系统,这可能是由于行结尾的差异造成的。 Windows / Dos使用\r\n
,而linux仅使用\n
。
您可以通过匹配任何空格而不是确切的空格来解决此问题 - 您可以使用\s
执行此操作:
$pattern='/<p class=\"clear\" style=\"margin-top:-17px;\"> <\/p> -->\s+<h4 class=\"lightgreenbg padding\">/';
如果它不是行结尾,那么你实际上并没有搜索正则表达式,只是一个字符串。所以我想说绝对不要使用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";
}
?>