Hallo,
$text = preg_replace('!|(\d+)|!e','str_repeat(\1," ")',$text);
bei \d+ steht in Self \d.+ , was ist richtig?
\d.+ würde auf eine Ziffer, gefolgt von einem oder mehr beliebigen Zeichen matchen, ist hier also nicht richtig.
Was macht das e als Modifier?
Das e sorgt dafür, dass der String im Replacement als PHP-Code ausgeführt wird, hier also die Funktion str_repeat() aufgerufen wird. Ohne das e würde er den Match lediglich durch die Zeichenkette 'str_repeat(\1," ")' ersetzen.
Wieso in 'str_repeat(\1," ") \1 ? Ist das das Zeichen für
PHP, die Nummer der 1. Backreferenz zu nehmen?
Das ist ein Fehler, richtig ist "\1". Außerdem sind die Parameter in str_replace() vertauscht. Insgesamt muss der Befehl also
$text = preg_replace('!|(\d+)|!e','str_repeat(" ","\1")',$text);
lauten.
Gruß,
Andreas.