我有一个包含许多行的字符串,例如:
$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做到这一点?
答案 0 :(得分:2)
您可以尝试使用preg_replace_callback
和branch 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);