Hallo mixmastertobsi,
Kannst Du mal bitte ein Beispiel machen, wie es in meinem Beispiel aussehen müsste?
Da du ja ersetzen möchtest (nicht nur die äußerste Ebene finden), wird preg_replace
mit einem rekursiven regex nicht ausreichen. Das rekursive Suchmuster ermöglicht es, die äusserste Ebene zu finden, es ist aber afaik nicht möglich, in jedem Selbstaufruf mit dem captured match zu ersetzen.
1.) Nun könntest du per preg_replace_callback
(siehe Beispiel) von aussen nach innen auflösen.
function parse_recursive($inp)
{
if (is_array($inp))
$inp = '<div class="quote">'.$inp[1].'</div>';
return preg_replace_callback('/{{((?>[^}{]+|(?R))*)}}/', 'parse_recursive', $inp);
}
Hier ein Beispiel auf eval.in und das Suchmuster auf regex101 zum probieren.
2.) Oder wie schon angesprochen per preg_replace
und while
von innen nach aussen.
$regx = '/{{([^}{]+)}}/'; $repl = '<div class="quote">$1</div>';
while(($tmp = preg_replace($regx, $repl, $str)) !== $str) $str = $tmp;
Noch ein Beispiel auf eval.in
Würde eher zu Variante 2 tendieren. Viel Erfolg, Robert