Andreas Görtz: RegExp: Ersetzen durch n-mal ein Zeichen

Beitrag lesen

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.