preg_split产生意外结果

时间:2018-06-29 20:40:29

标签: php regex

我正在使用PHP for(i=3;i<=n;i++) let n=4; variable a,b=0,c=1; [a=b+c;b=c;c=a;].........(1) //now a=1;b=1;c=1; [a=b+c,b=c,c=a)...............(2) //now a=2;b=1;c=2; 命令以数组形式读取文件。数组的每一行都包含数字,例如“ 0 0 0 1 22 5 1 71”等。应该有1024组这些非空白字符,我正在尝试将它们提取到数组中

file

但是,当我运行此命令时,我得到的计数是1026,而不是1024。什么是错?当我使用

// $lines contains each line from file(...)

foreach ($lines as $i => $value) 
{
  $matches = preg_split('/\s*(\d*)\s*/', $lines[$i]);
  echo count($matches);

}

我得到1027。

2 个答案:

答案 0 :(得分:0)

您根本不需要正则表达式。使用explode可能会更快。并要修改数组,只需引用foreach(但要进行与该做法有关的read the warnings,然后再使用unset。)

$lines = file("input.txt");
foreach ($lines as &$value) {
    $value = explode(" ", trim($value));
}
unset $value;

答案 1 :(得分:0)

您的正则表达式需要匹配您要分割的定界符字符串。您的代码可能会出错,因为它试图在定界符中包含数字。更不用说/\s*\d*\s*/几乎可以匹配空格字符和数字的任何组合。

$input = '   0 0 0 1 22 5 1 71 ';
var_dump(preg_split('/\s+/', $input, -1, PREG_SPLIT_NO_EMPTY));

输出:

array(8) {
  [0]=>
  string(1) "0"
  [1]=>
  string(1) "0"
  [2]=>
  string(1) "0"
  [3]=>
  string(1) "1"
  [4]=>
  string(2) "22"
  [5]=>
  string(1) "5"
  [6]=>
  string(1) "1"
  [7]=>
  string(2) "71"
}