preg_match()正在开发php70.14(ubuntu)但不在php5.3.26(windows 2008)上

时间:2017-01-18 18:01:02

标签: php regex preg-match

我正在尝试匹配文件中的信息,但是当我尝试使用preg_match("/^[1-9][0-9]{4}$/")进行正则表达时,我可以匹配单行,但不能直接从文件中读取。我的代码如下:

<?php

$line = "23146";
$line = str_replace("\n", "", $line);
if(preg_match("/^[1-9][0-9]{4}$/", $line, $matches)) { // Matching the PO No.
    print_r($matches);
}

// Following don't work on PHP 5.3.26

$file = fopen("meaw.txt", "r") or die("Unable to open file");

while(!feof($file)) {

    $line = fgets($file);
    if(preg_match("/^[1-9][0-9]{4}$/", $line, $matches)) { // Matching the PO No.
        print_r($matches);
    }

}

fclose($file);
echo "\nFile Closed";


?>

我的文件是meaw.txt

我的问题是,当我在ubuntu PHP7上运行它时,此代码可以运行文件。但是,当我在windows2008 php5.3.26上运行此代码时,它会打印以下内容

  

阵   (      [0] =&gt; 23146   )

     

文件已关闭

但我应该得到

  

阵列(       [0] =&gt; 23146)阵列(       [0] =&gt; 63144)阵列(       [0] =&gt; 63140)阵列(       [0] =&gt; 63201)阵列(       [0] =&gt; 63148)阵列(       [0] =&gt; 63201)阵列(       [0] =&gt; 63148)阵列(       [0] =&gt; 63201)阵列(       [0] =&gt; 63148)阵列(       [0] =&gt; 63201)阵列(       [0] =&gt; 63140)阵列(       [0] =&gt; 63148)

     

文件已关闭

有人可以告诉我为什么会这样吗?谢谢。

1 个答案:

答案 0 :(得分:0)

问题是Windows将新行读为&#34; \ r \ n&#34; ,但unix以不同方式读取它。我所要做的只是在while循环中添加以下内容

$line = str_replace("\r\n", "", $line);