2

我有以下测试程序:

#!/usr/bin/php
<?php
echo "Starting\n";

# Now read the file.
#
$file_pn = "contact.txt";
$fh = fopen($file_pn, 'r');
while (!feof($fh)) {
   $line = fgets($fh);
   $trimmed = trim($line);
   echo "trimmed = <" . $trimmed . ">\n";
   if (preg_match('/^\s*$/', $trimmed)) {
      echo "Looks blank: trimmed = <" . $trimmed . ">\n";
      #continue;
   }
}
fclose($fh);
?>

正在读取的文件有一些空行和一些非空行。如此处所示,它的行为符合人们的预期:只有实际为空白的行才会收到“看起来空白”消息,并且修剪 = <>。但是如果我在第 12 行注释掉 echo 语句并再次运行脚本,当我们到达 if 语句时,$trimmed 总是显示为空字符串。就好像 $trimmed 被破坏了,除非它被回显。怎么会这样?

4

1 回答 1

2

我认为您不需要在那里使用正则表达式。如果该行仅以空格开头,trim()则将其变为空。

尝试:

if (empty($trimmed)) {

它的行为符合我的预期 - 因为您现在没有回显任何非空行,所以您的输出只会显示一堆空行

$ ./test|wc -l
18
$ nano test #comment line 12
$ ./test|wc -l
6
于 2013-09-18T02:48:59.740 回答