Webstatt.org - Community seit 2006 - 2012 (2024?)

preg_replace Übergabe als Variable

Avatar user-317
16.04.2006 14:04

Jow, der Titel sagt eigentlich schon alles.
Erstmal der Code :
<?php
function replace_tpl ($category, $string, $is_function = '0'zwinkern {
$pattern = '/{' . $category . ': (.*)}/is';

if ($is_function == '1'zwinkern {
$string = preg_replace ($pattern, $category('\\1'zwinkern, $string);
} else {
$string = preg_replace ($pattern, $\\\\1, $string);

return $string;
}
?>


Wie ihr sehen könnt, hätte ich gerne das Ergebnis der Suche mit (.*) als Variablenname im else-Teil unten. Mir ist klar das das so nicht klappt, dient nur zur veranschaulichung zwinkern
Hat jemand eine Idee wie ich das am Geschicktesten mache? Ich würde gerne darauf verzichten zuvor mir preg_match(_all) zu arbeiten :/

Avatar user-300
16.04.2006 14:33

Ich werde aus deiner Veranschaulichung nicht schlau lächeln
Was willst du mit $category('\\1'zwinkern andeuten? Diese Syntax wird doch bei anonymen / temporären Funktion verwendet.
Wie soll das ganze nach der Ersetzung aussehen?

Avatar user-317
16.04.2006 14:46

Es geht eher um den else-Zweig.
$string = preg_replace ($pattern, $\\1, $string);

Hier möchte ich eben das Ergebnis der Suche als Variablennamen haben.
Als Beispiel also so :

<?php
$string = '{navigation: last_news} ist toll';
$string = replace_tpl ('navigation', $string);
?>


Intern dann eben so :
<?php
$pattern = '/{navigation: (.*)}/is';
$string = preg_replace ($pattern, $last_news, $string);
?>


Schwierig zu erklären :/

Avatar user-317
22.04.2006 19:14

Ich grabe den Thread jetzt einfach nochmal aus. Also vielleicht ist die Formulierung besser : Wie bekomme ich den per RegEx gefundenen Wert als Variabelnamen raus?
Also sowas wie {navigation: news} dann steht mir die Variable $news zur Verfügung.

Avatar user-253
22.04.2006 20:02

$string = 'yy {navigation: edit} xx';

if(preg_match('/{(.*?): (.*?)}/si',$string,$result)) {
$name = $result[2];
$wert = $result[1];
$$name = $wert;
}

print "\$edit: $edit";

Avatar user-317
22.04.2006 20:18

Also komme ich nicht um preg_match herum :/ Schade. user-158ke an alle.

Avatar user-271
22.04.2006 21:01

also ich mach es in meiner Template klasse so, dass ich es mit preg_match auslese und dann in ein array abspeicher...später ersetz ich es mit str_replace, weil man das ja wieder zusammensetzen kann ;D

gruss Jan (nur so als anregung)

#!/bin/bash
traurig){ neutral:& };:
Avatar user-317
22.04.2006 21:10

Jo, das ist mir dann soweit schon klar. Dachte nur das ich das ganze in einem Schritt automatisieren kann ^^

Avatar user-253
23.04.2006 07:39

Hmm ich bin mir leider noch unsicher wie das Ergebnis aussehen soll. Mein Beispiel sollte tendenziell eher das Prinzip dynamischer Variablennamen verdeutlichen.
Vielleicht kannst du noch einmal ein Beispiel posten (also insbesondere wie der String vor und nach dem Ersetzen ausehen soll).

Michael

Avatar user-317
23.04.2006 18:34

Schon okay so, danke nochmal für die Hilfe.