填充字符串中的空白区域

时间:2016-02-21 11:20:34

标签: 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   EEE
B   1   FFF
C   1   GGG
C   1   HHH

我怎么能用php做到这一点?

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

1 个答案:

答案 0 :(得分:2)

您可以尝试使用preg_replace_callbackbranch reset正则表达式来维护群组索引。

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

See explanation on 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);

Demo at eval.in