muenzchen: preg_replace Ersetzung aus Datei einlesen klappt nicht

Hallo,

ich habe diese Funktion gefunden und sie funktioniert prima:

preg_replace("/((<[^>]*)|$s)/ie", '"\2"=="\1"? "\1":"<b>\1</b>"', $t);

Um aber den HTML Quelltext leichter warten zu können lese ich ihn per file() aus einer externen Datei ein, die so aussieht: <b>\1</b>

$tpl_file = implode('', file('preg.htm'));
preg_replace("/((<[^>]*)|$s)/ie", '"\2"=="\1"? "\1":"$tpl_file"', $t);

Allerdings will das nicht klappen, ich bekomme als Ausgabe immer nur '1', statt des Textes in Fettschrift. Kann mir jemand erklären warum? Ich verstehe nicht welche Probleme PHP da hat.

MfG, muenzchen

  1. Halihallo muenzchen

    $tpl_file = implode('', file('preg.htm'));

    Mein Gott, was für eine Verschwendung :-)
    http://www.php.net/file_get_contents wenn schon...

    preg_replace("/((<[^>]*)|$s)/ie", '"\2"=="\1"? "\1":"$tpl_file"', $t);
    Allerdings will das nicht klappen, ich bekomme als Ausgabe immer nur '1', statt des Textes in Fettschrift. Kann mir jemand erklären warum? Ich verstehe nicht welche Probleme PHP da hat.

    Tja, erklären kann ich es nicht. Ich habe nur Vermutungen. Dieses
    e (execute) bei Regular Expressions ist, naja, eine sprachliche
    Extremität der 4GL Languages genau wie eval und Co. Man muss damit
    einfach aufpassen...
    Deine Expression ohne $tpl_file funktioniert ja. Nun, warum machst
    du es denn nicht *genau* so?

    Von:
    preg_replace("/((<[^>]*)|$s)/ie", '"\2"=="\1"? "\1":"<b>\1</b>"', $t);
    Nach:
    preg_replace("/((<[^>]*)|$s)/ie", '"\2"=="\1"? "\1":"'.$tpl_file.'"', $t);

    Man beachte, dass $tpl_file in den String *direkt* eingesetzt wird.

    Funktioniert's damit?

    Viele Grüsse

    Philipp

    1. Hallo,

      nein dann geht leider gar nichts mehr, dann akzeptiert er den Code nicht mehr.

      Parse error: parse error, unexpected T_STRING in /functions.inc.php(501) : regexp code on line 1

      Fatal error: Failed evaluating code: ""=="mal"? "mal":"mal" in /functions.inc.php on line 501

      Ich lese es deshalb aus einer externen Datei ein, weil der HTML Quelltext leicht änderbar sein soll, ohne dass man im PHP Code herumwühlen muss. file() benutze ich, weil das Programm auch auf PHP < 4.3 laufen soll.

      MfG, muenzchen