PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP]ereg_replace(): Text wird nicht ersetzt.



Latency
30.04.2005, 10:28
Meinereiner hat folgendes Problem. Ich lasse per ereg_replace einen String nach bestimmten zeichen durchsuchen die wie folgt aussehen: <%hierKannWasBeliebigesStehen%>

Und diese lass ich dann ersetzen durch einen anderen String. (ereg_replace("<%hierKannWasBeliebigesStehen%>", "Huhu :-)", $String);

Das funktioniert auch sobald ich bekannte Strings ersetze. Was aber wenn nun ein <% %> im String ist, von dem er nicht wei� wie er es ersetzen soll. So m�chte ich dies einfach vom Text ausgeschlossen haben. Jedoch gibt es da ein paar kleine Probleme.

Denn angenommen wir haben folgenden Code:

$String = "aj aksdfj <b><%jojo%>jfja<%jo%></b>";
$String = ereg_replace("<%.*%>", "", $String);
echo $String; //Ausgabe: aj aksdfj <b></b>

Jedoch m�chte ich nicht diese Ausgabe, sondern lediglich, dass die Zwei <% %> verschwinden. Jedoch wie? In einem RegEx Tutorial hab ich gelesen, dass \b einen Ancher setzt, so dass nur Wortwei�e gel�scht wird, jedoch passiert bei mir da gar nix.

Manni
30.04.2005, 10:36
Ich weiß zwar nicht so genau, was du willst, aber villeicht ist das dein Problem:

$String = "aj aksdfj <b><%jojo%>jfja<%jo%></b>";
$String = ereg_replace("#<%(.*)%>#U", "\\1", $String);
echo $String; //Ausgabe: aj aksdfj <b>jojojfjajo</b>
Wenn du ein U hinter deine RegExp schreibst, werden nur minimale Übereinstimmungen gefunden, heisst es geht nicht vom ersten <% bis zum letzten %>

Latency
30.04.2005, 16:50
Die Ausgabe, die laut dir rauskommen sollte ist zwar die, die ich will, jedoch wird sie nicht ausgegeben, die <%jojo%> werden weiterhin angezeigt.

Manni
30.04.2005, 19:21
Sorry, war ungetestet. Hier mal eine korrigierte Version:

$String = "aj aksdfj <b><%jojo%>jfja<%jo%></b>";
preg_match_all("#<%(.*)%>#U", $String, $ergebnisse, PREG_SET_ORDER);
foreach($ergebnisse as $ergebnis)
$String = str_replace("<%".$ergebnis[1]."%>", $ergebnis[1], $String);
echo $String; //Ausgabe: aj aksdfj <b>jojojfjajo</b>
Das Problem ist, das bei den ereg-Sachen die PCRE-Modifiers nicht berücksichtigt zu werden scheinen. Das heisst, man kann dem Teil nicht sagen, es soll nicht so gierig sein ;) Also muss imo eine kompliziertere Version her...