preg_replace Problem
bearbeitet von Jonny 5Hallo 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](http://www.rexegg.com/regex-recursion.html) 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](http://www.regular-expressions.info/brackets.html) zu ersetzen.
1.) Nun könntest du per [`preg_replace_callback` (siehe Beispiel)](http://php.net/manual/de/function.preg-replace-callback.php#example-5268) von aussen nach innen auflösen.
~~~php
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](https://eval.in/690337) und das [Suchmuster auf regex101](https://regex101.com/r/dVRTPN/1) zum probieren.
2.) Oder wie schon angesprochen per `preg_replace` und `while` von innen nach aussen auflösen.
~~~php
$regx = '/{{([^}{]+)}}/'; $repl = '<div class="quote">$1</div>';
while(($tmp = preg_replace($regx, $repl, $str)) !== $str) $str = $tmp;
~~~
Noch ein [Beispiel auf eval.in](https://eval.in/690331)
Würde eher zu Variante 2 tendieren. Viel Erfolg, Robert