RegEx wieder einmal
norman
- php
hallo allesamt,
ich hab schon haufenweise artikel/einträge gelesen, aber keines vermochte mein problem zu lösen...
ich möchte folgendes ersetzen:
<!-- {start} -->
hier ist irgendein text....
<!-- {ende} -->
mit preg_replace("/<!-- {start} -->(.*)<!-- {ende} -->/",....)
geht nichts. auch andere schreibweisen haben mich nicht weitergebracht?
hat jemand eine lösung parat??
thx in advance,
norman
Hallo!
ich möchte folgendes ersetzen:
<!-- {start} -->
hier ist irgendein text....
<!-- {ende} -->
Ich vermut mal du willst das in der Mitte haben??? Wennst du es nämlich nur ersetzen willst, dann $neuerString="Hier irgendwas neues!" ;-)
Ansonsten probier' mal das:
$neuerString=preg_replace("/^.*<!-- {start} -->(.*?)<!-- {ende} -->.*$/msi","\1",$string);
Ist aber nicht das Optimum! Geht schneller..., bin aber zu faul zu überlegen! :-)
Ciao,
Andy
hallo,
Ich vermut mal du willst das in der Mitte haben??? Wennst du es nämlich nur ersetzen willst, dann $neuerString="Hier irgendwas neues!" ja, das in der mitte will ich weg.
aber mit dem /msi war schon richtig!! muss mir mal die optionen anschauen :-)
danke,
norman
hallo,
noch ein problemchen:
preg_replace("/<!-- {start} -->(.*)<!-- {ende} -->/msi",...)
ist schon ganz gut, aber vom
<!-- ende ODER start, das weiß ich leider nicht genau,
bleibt "<!" über - und das ist im html code nicht so super, weil dann einiges ausgeblendet wird....
what's los???
thx,
ciao
Hallo!
preg_replace("/<!-- {start} -->(.*)<!-- {ende} -->/msi",...)
ist schon ganz gut, aber vom
<!-- ende ODER start, das weiß ich leider nicht genau,
bleibt "<!" über - und das ist im html code nicht so super, weil dann einiges ausgeblendet wird....
Ist aber nicht das, was ich dir geschrieben habe?!
Wieso schreibst du immer "!" ? Brauchst du nicht, reicht auch "!" allein!
Also bei mir bleibt kein <! übrig! Bei deiner Bedingung bleibt aber alles vor <!-- start --> und hinter <!-- ende --> auch übrig!
Vielleicht ist das dein Problem! Hast du meine Expression probiert?
Ciao,
Andy
hallo,
aha - hab mich vielleicht nicht deutlich ausgedrückt:
----------------
TEXT
<!-- {start} -->
text zu ersetzen
<!-- {ende} -->
NOCH MEHR TEXT
----------------
also: inkl. den ersetzungsmarken soll "text zu ersetzen" weg.
rundherum das soll bleiben. daher kann ich ja auch nicht mit deinem arbeiten oder? weil da wäre dann ja ALLES weg....
thx
Hallo!
TEXT
<!-- {start} -->
text zu ersetzen
<!-- {ende} -->
NOCH MEHR TEXTalso: inkl. den ersetzungsmarken soll "text zu ersetzen" weg.
rundherum das soll bleiben. daher kann ich ja auch nicht mit deinem arbeiten oder? weil da wäre dann ja ALLES weg....
Nee! Bei meinem kompletten Code bleibt "text zu ersetzen" übrig!
Aber wenn das so is, dann müsste dein Code eigentlich funzen:
$neuerString=preg_replace("/<!-- {start} -->.*<!-- {ende} -->/msi","",$string);
Die Klammer um .* kannst dir dann sparen, da du den Ausdruck nicht weiter verwenden willst.
Schau bitte noch mal!
Ciao,
Andy
jo, passt eh :-)
is eh nicht von diesem teil übergeblieben, sondern bei einem anderen...
sorry .-)
ciao
Hallo!
jo, passt eh :-)
is eh nicht von diesem teil übergeblieben, sondern bei einem anderen...
Dann is ja gut! :-)
Beachte auch noch die Nachricht von Eternius! Falls du mehrere <!-- start --> <!-- ende --> haben solltest, musst du den Ausdruck ungreedy setzen, sonst verschwindet alles zwischen dem ersten start und dem letzten ende!
Ciao,
Andy
hallo
$neuerString=preg_replace("/<!-- {start} -->.*<!-- {ende}
^ |
make it non greedy? -->.*?<!--
gruss
Hallo Eternius!
$neuerString=preg_replace("/<!-- {start} -->.*<!-- {ende}
^
|make it non greedy? -->.*?<!--
Hab' ich auch schon dran gedacht! Aber er hat ja nicht geschrieben, das mehrere <!-- start --> <!-- ende--> da sind! ;-) Ansonsten geht auch /..../Umsi!
Ist die gleiche Schreibarbeit, die Frage ist welcher Weg ist weiter. Zur u-Taste oder zur ß-Taste + SHIFT natürlich! ;-)
Ciao,
Andy
;-)
also ich kenn mich in php so richtig gar nicht aus, aber ich schätze mal der parameter da macht alle .* nicht greedy, also gefällt mir dann das ? besser, falls ich noch mal mr greedy brauch im ausdruck.
long live perl ;-)
Hallo!
also ich kenn mich in php so richtig gar nicht aus, aber ich schätze mal der parameter da macht alle .* nicht greedy, also gefällt mir dann das ? besser, falls ich noch mal mr greedy brauch im ausdruck.
Na dann kann man ja .*? schreiben, dann ist der Ausdruck wieder greedy! :-)
U kehrt die Greedinees praktisch um! Und ja, dieser Parameter ist nicht kompatibel zu Perl, sondern alleinige PHP-Spezialität!
.*? ohne U ist natürlich besser, da man den Ausdruck leichter portieren kann!
So Thema abgeschlossen!
Ciao,
Andy
Hello,
bei so eindeutigen Mustern als Trenner könnte auch zweimaliges explode() helfen und ersetzen und wieder zusammenbauen...
http://de2.php.net/manual/de/function.explode.php
Liebe Grüße aus http://www.braunschweig.de
Tom