Regular Expressions: preg_replace

Hallo,

ich habe eine Frage. Wahrscheinlich sehe ich den Baum vor lauter Wäldern nicht. :wink:

Also ich habe folgenden Code:

[php]

<?php $vorher = "Ein kleiner brauner Fuchs springt über den braunen Baum und frisst den dummen Hasen.
ssss 1246789yyyy"; echo "Vorher ".$vorher; $nachher\_bingo = str\_replace("=","xyz",$vorher); $nachher\_bingo = str\_replace("/","abc",$nachher\_bingo); $nachher\_bingo = str\_replace("'","zzz",$nachher\_bingo); $nachher\_bingo = str\_replace("","groesser",$nachher\_bingo); //$bingo = str\_replace(".","punkt",$nachher\_bingo); //echo " Zwischenstand: ".$bingo; $peep = "Ein kleiner brauner Fuchs springt über den dummen braunen Baum und frisst den Hasen. ssss kleinertable borderxyzzzz1zzzgroesserkleinertrgroesserkleinertdgroesser1kleinerabctdgroesserkleinertdgroesser2kleinerabctdgroesserkleinertdgroesserkleinerimg srcxyzzzzimagesabcinfopunktgifzzz titlexyzzzzollie will unbedingt tanzenzzzgroesserkleinerabctdgroesserkleinerabctrgroesser kleinertrgroesserkleinertdgroesser4kleinerabctdgroesserkleinertdgroesserkleinerimg srcxyzzzzimagesabcinfopunktgifzzz titlexyzzzzollie will unbedingt tanzenzzzgroesserkleinerabctdgroesserkleinertdgroesser6kleinerabctdgroesserkleinerabctrgroesser kleinertrgroesserkleinertdgroesser7kleinerabctdgroesserkleinertdgroesser8kleinerabctdgroesserkleinertdgroesser9kleinerabctdgroesserkleinerabctrgroesserkleinerabctablegroesseryyyy "; $nachher = preg\_replace("=ssss(.+)yyyy=Ui","","$bingo"); echo " Bingo: ".$bingo; //echo " Nachher: ".$nachher\_hi; //echo " Scheisse ".$scheisse; echo " Peep ".$nachher; echo " Bereinigt ".preg\_replace("=ssss(.+)yyyy=Ui","","$bingo"); ?\> [/php] Das komische ist, dass preg\_replace mit der Varaiable $peep läuft wie es soll. Mit $bingo als Parameter wirds komplett ignoriert. Die Ausgabe der var $peep ist exakt die selbe wie $bingo, also unbereinigt.

Hallo,

Ich habe auch lange überlegt.
Scheinbar liegt es einfach daran, dass der Punkt innerhalb von preg_replace("=ssss(.+)yyyy=Ui","","$bingo"); keine „new lines“, also Zeilenumbrüche im gegebenen Text, akzeptiert.
Um das zu lösen setzt man sie einfach ins Muster dazu, sodass sich dann folgendes ergibt:
preg_replace("=ssss((.|\n)+)yyyy=Ui","",$bingo);

Ich hoffe, das hilft dir weiter.

Danke erstmal.

Werde es gleich probieren. Irgend sowas schwante mir auch. Ich möchte halt Quellcode bereinigen um Ihn für den pdf-Ausdruck zu optimieren. Dazu müssen zB kleine Infografiken und der title raus. Denn daran verschluckt sich dompdf noch.
Daher ist der Zeilenumbruch nicht immer an derselben Stelle. Die Idee ist halt vor und hinter die Infografik ein Schlüsselwort zu setzten, zB in Form eines Kommentars

Hi,

hiermit ein fettes Dankeschön!!! Genau das wars!
Nach 3 Tage probieren…

Nun aber eine Verständnisfrage:
Was genau macht der Ausdruck???
("=ssss((.|\n)+)yyyy=Ui","",$bingo);
ssss und yyyy sind meine Schlüsselworte, klar. $bingo ist der string.
„.“ oder „Zeilenumbruch“ soll ignoriert werden? Und wofür steht das Ui
Ok, sind doch ein paar mehr Fragen. :smile:)

Das „Ui“ und das „=“ konnte ich selber nicht rausfinden, ich war mal davon ausgegangen, dass du es schon kennst. :smiley:
Bei dem Rest handelt es sich um einen ‚regulären Ausdruck‘. Der Punkt steht dabei für ein beliebiges Zeichen außer einem Zeilenumbruch und \n eben für einen Zeilenumbruch.
Wenn man ihn ausschreiben will wäre das in etwa:
Ersetze das Muster ssss(Eine Zeichenfolge, bestehend aus beliebigen Zeichen ohne Zeilenumbr. [.] ODER [|] Zeilenumbr. [\n] in beliebig wechselnder Abfolge, die beliebig lang sein darf, aber mindestens ein Zeichen enthalten muss. [+])yyyy
Die Klammersetzung ist dabei sehr wichtig.
Eine Übersicht über die erlaubten Zeichen in PHP gibts hier: http://de.php.net/manual/de/function.preg-replace.ph…
Wenn du mehr über reguläre Ausdrücke lesen willst, schau mal hier: http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck