我有一个包含许多行的字符串,例如:
$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 演示