填充字符串中的空白区域


Fill empty space in string

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

$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 做到这一点?

我的代码:https://eval.in/522676

您可以尝试使用preg_replace_callback和分支重置正则表达式来维护组索引。

$re = '/^'h*(?|('S+)'h+('S+)'h+('S+)|()('S+)'h+('S+)|()()('S+))'s*$/m';

请参阅regex101的说明;将col 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);

eval.in 演示