preg_replace
Annette
- php
Hii,
Es ist ein wenig schwer zu erklären, aber ich werde mir mühe geben!
Ein PHP Programm soll ein Template aufrufen und dessen Variablen ersetzen.
Das komplizierte am Template ist, dass die Variable nicht einfach nur eine %variable% ist sondern eine %variable__123% mit einem default-value.
Diese Werte sollen je nach dem rabattiert werden.
Also wir haben:
programm.php
template.tmpl
%normale_variable%
%noch_eine_normale_variable%
%spzeial_variable_mit_default_wert__123%
%spzeial_variable_mit_default_wert__456%
%spzeial_variable_mit_default_wert__789%
Ohne jetzt weiter auf Details einzugehen nun die eig. Fragestellung:
Wie muss mein Suchmuster aussehen um "%spzeial_variable_mit_default_wert__" zu finden, jedoch nach dem Berechnen "%spzeial_variable_mit_default_wert__*%" mit einem $neuen_wert zu ersetzen?
Wofür der Stern steht ist ja denke ich mal klar :-)
Vielen Dank schon mal!!
Annette
Ich habs!
Cool.. war ja einfacher wie ich dachte!!
<?
$rabatt = 10;
function preg_callback($result){
global $rabatt;
return $result[1]/100*$rabatt;
}
$zeichenkette = 'Dat is n %spezial__456% Test Dat is n %spezial__789% Test';
$suchmuster = '/%spezial__(.+?)%/i';
echo preg_replace_callback($suchmuster, 'preg_callback', $zeichenkette);
?>
Cool.. war ja einfacher wie ich dachte!!
Ist es nicht.
$suchmuster = '/%spezial__(.+?)%/i';
(.+?) matcht auf wesentlich mehr als nur eine 3[sic?]-stellige Dezimalzahl und ist zudem gierig.
jo kenn mich nicht soo gut damit aus.
was soll ich anstatt (.+?) nehmen??
Annette
Hi,
$suchmuster = '/%spezial__(.+?)%/i';
(.+?) matcht auf wesentlich mehr als nur eine 3[sic?]-stellige Dezimalzahl und ist zudem gierig.
Nein, gierig ist es definitiv nicht.
cu,
Andreas
Nein, gierig ist es definitiv nicht.
Ja du hast recht - Denkfehler, ist andersrum:
However, if a quantifier is followed by a question mark, then it becomes lazy, [...]
Wie muss mein Suchmuster aussehen um "%spzeial_variable_mit_default_wert__" zu finden, jedoch nach dem Berechnen "%spzeial_variable_mit_default_wert__*%" mit einem $neuen_wert zu ersetzen?
%spzeial_variable_mit_default_wert__ wörtlich
gefolgt von einer Ziffernfolge (0 oder 1 mal)
bzw gefolgt von einer Ziffer 0 oder mehrmals
gefolt von % wörtlich
Wofür der Stern steht ist ja denke ich mal klar :-)
Dir ist es scheinbar nicht klar, der Stern (Asterisk) ist der 0-oder-mehrmals-Quantifikator: Meta-characters