2017-01-24 1 views
1

Ich möchte preg_replace Klassenmethode als zweite Variable verwenden, wiepreg_replace. Wie benutzt man 0 in der Funktion?

$x = preg_replace('/\[\[\[(.+)\]\]\]/', 
    (new ButtonGroupWidget(['idsForLoad' => ['\0']]))->run(), 
    $code); 

Idee ist Schaltflächen erzeugen statt [[[button id]]]. Ja, das ist irgendwie seltsam) Und ja, ich weiß, was Smarty ist)

+1

Deklarieren Sie eine Callback-Funktion und verwenden Sie 'preg_replace_callback'. –

+0

Danke! Passt perfekt! – Teo

+0

Geben Sie bitte Ihre Antwort ein, um die Frage korrekt zu beantworten. – Teo

Antwort

1

Sie können preg_replace_callback verwenden und eine Callback-Funktion anstelle eines String-Ersetzungsmusters in diese Funktion übergeben. Wenn Sie das Argument des Übereinstimmungsobjekts als $m definieren, wird die gesamte Übereinstimmung in $m[0] gespeichert.

function repl($m) { 
    return (new ButtonGroupWidget(['idsForLoad' => [$m[0]]]))->run(); 
} 
$code = "[[[btn1]]] [[[btn2]]]"; 
$x = preg_replace_callback('/\[\[\[(.+?)]]]/', 'repl', $code); 

Ich rate auch ein faules Punkt Anpassungsmuster in der Regex zu verwenden, um den regulären Ausdruck zu erzwingen zwischen [[[ und ]]] die kürzesten Strings entsprechen. Beachten Sie, dass ] hier nicht maskiert werden muss.

Verwandte Themen