Expertenwissen
Von: , 31.08.2009 15:30 Uhr
Hallo,

ich habe eine Frage. Wahrscheinlich sehe ich den Baum vor lauter Wäldern nicht. ;)

Also ich habe folgenden Code:

[php]

<?php
$vorher = "Ein kleiner brauner Fuchs springt über den braunen Baum und frisst den dummen Hasen.
ssss <table border='1'><tr><td>1</td><td>2</td><td><img src='images/info.gif' title='ollie will unbedingt tanzen'></td></tr>
<tr><td>4</td><td><img src='images/info.gif' title='ollie will unbedingt tanzen'></td><td>6</td></tr>
<tr><td>7</td><td>8</td><td>9</td></tr></table>yyyy";

echo "Vorher<br>".$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("<","kleiner",$nachher_bingo);
$bingo = str_replace(">","groesser",$nachher_bingo);
//$bingo = str_replace(".","punkt",$nachher_bingo);
//echo "<br><hr><br>Zwischenstand:<br>".$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 "<br><hr><br>Bingo:<br>".$bingo;
//echo "<br><hr><br>Nachher:<br>".$nachher_hi;
//echo "<br><hr><br>Scheisse<br>".$scheisse;
echo "<br><hr><br>Peep<br>".$nachher;
echo "<br><hr><br>Bereinigt<br>".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.

4 Antworten zu dieser Frage
  1. Antwort von nach einer Stunde 0 hilfreich
    Re: Regular Expressions: preg_replace
    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.
    • Antwort von nach 17 Stunden 0 hilfreich
      Re^2: Regular Expressions: preg_replace
      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 <!--anfang--><img src=...><!--ende-->
    • Antwort von nach 19 Stunden 1 hilfreich
      Re^2: Regular Expressions: preg_replace
      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. :))
      • Antwort von nach 20 Stunden 0 hilfreich
        Re^3: Regular Expressions: preg_replace
        Das "Ui" und das "=" konnte ich selber nicht rausfinden, ich war mal davon ausgegangen, dass du es schon kennst. :D
        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