preg_replace

Wolfsbein

Erfahrenes Mitglied
Hallo
ich will mit preg_replace was ersetzen. Aber irgendwie haut es noch nicht ganz hin:
Code:
$pattern = "°(<div id=\"praesentation\")(.*)(</div>)°";
$strTemplate = preg_replace($pattern,">",$strTemplate);
Ich möchte dass nach dem Ersetzen ein <div id="praesentation"></div> dasteht.
Vorher steht z.B. da:
<div id="praesentation" title="Starten Sie die Tour">
<a href="praesentation/{--ROOT--}_idylle_1_{--LANG--}.htm">Pr&auml;sentation starten</a></div>
Ich habe schon im Forum gesucht, aber nichts brauchbares gefunden. Außer dass mir evtl. ein Schalter fehlt?
 
Nein geht leider auch nicht. Ich habe auch das schon probiert:
Code:
$strTemplate = preg_replace($pattern,"\$1>\$3",$strTemplate);
Ich sollte noch dazusagen, dass diese Zeichenkette nur einmal vorkommt. Gäbe es noch eine andere Möglichkeit, oder Funktion?
 
Code:
$pattern = "°(<div id=\"praesentation\")(.*)(</div> )°";
#                                                  ^-- hopla!

$pattern = "°(<div id=\"praesentation\")(.*)(</div>)°"; # <-- besser!

//edit: ok doch nicht, wie soll man vernünftig debuggen wenn hier alles anders dargestellt wird, als geschrieben *verzweifel*
 
$text = preg_replace("=(<div class=\"praesentation\")(*.)[>](*.)(</div>)=isU", "$1>$4", $text);

Wenn ich dich richig verstanden hab:
Du willst alles, was zwischen <div class="praesentation"> und </div> steht, entfernen?

//Edit: Und alle zusätzlichen Attribute auch?
 
Ja auch alle zusätzlichen Attribute. Wie in meiner Beispiellösung gepostet können da noch mehrere im div Container stehen. Du hast das > Zeichen in [] geschrieben. Was heißt das?
 
Die eckigen Klammern sind so ähnlich wie die runden, nur dass es darin keine Schlater gibt, die etwas bewirken (ausser ] natürlich)
Man kann danach auch nicht mit einer Variable drauf zugreifen, weil es ja eh ein statischer Inhalt ist.

Um alle Attribute rauszufiltern, mach es am besten so: (kommen meherere Divs vor?)
$text = preg_replace("=[<div](*.)[class=\"praesentation\"](*.)[>](*.)[</div>]=isU", "<div class=\"praesentation\">&nbsp;</div>", $text);

Mach das &nbsp; deswegen rein, weil ich mir nicht sicher bin, ob alle Browser mit nem leeren Div zurechtkommen.

Ps: Die Klasse praesentation hat doch irgendwas "besonderes", wie nem Rahmen, also dass auch was angezeigt wird, wenn nichts besonderes drin ist? Sonst wäre es irgendwie witzlos.
 
Danke wir kommen der Läsung immer näher ;). Bei deiner Lösung muss man aber = duch \= ersetzen. Deshalb arbeite ich gerne mit °.
Leider erhalte ich jetzt diese Fehlermeldung: Compilation failed: nothing to repeat at offset 7. Und mit der kann ich gar nichts anfangen :(.
 
Lag an ein Parr Schreibfehlern von mir (z.B. *. statt .* usw)

$text = preg_replace("=[<div](.*)[class\=\"praesentation\"](.*)[>](.*)[</div>]=i", "<div class=\"praesentation\">&amp;nbsp;</div>", $text);

Is getestet, müsste eigentlich gehen.
 
Zurück