Php 在字符串中填充空格

Php 在字符串中填充空格,php,arrays,regex,Php,Arrays,Regex,我有一个包含许多行的字符串,例如: $str = 'A 1 AAA BBB 2 CCC DDD B 1 EEE FFF C 1 GGG HHH'; 我想这样填补空白: A 1 AAA A 1 BBB A 2 CCC A 2 DDD B 1 EE

我有一个包含许多行的字符串,例如:

$str = 'A    1   AAA
                BBB
            2   CCC
                DDD
        B   1   EEE
                FFF
        C   1   GGG
                HHH';
我想这样填补空白:

A   1   AAA
A   1   BBB
A   2   CCC
A   2   DDD
B   1   EEE
B   1   FFF
C   1   GGG
C   1   HHH
我如何使用php实现它

我的代码:

您可以尝试使用和regex来维护组索引

$re = '/^\h*(?|(\S+)\h+(\S+)\h+(\S+)|()(\S+)\h+(\S+)|()()(\S+))\s*$/m';
);用上面最后一个非空值填充第1列和第2列中的空值

$str = preg_replace_callback($re, function($m) use (&$prev)
{
 // set empty values if previous not empty
 if($m[1]==="" && $prev[1] !== "") $m[1] = $prev[1];
 if($m[2]==="" && $prev[2] !== "") $m[2] = $prev[2];

 // store previous value
 if($m[1]!=="") $prev[1] = $m[1];
 if($m[2]!=="") $prev[2] = $m[2];

 // newly formatted
 return $m[1] . "   " . $m[2] . "   " . $m[3];
}, $str);