Hi!
Wie kann ich das denn hinbekommen, das auch nichts innrehalb einer Klammer ersetzt wird? Habe es so probiert:
PHP-Code:
$ChgDatei = preg_replace("/((<[^\('>]*)|$kw)/ie", '"\2"=="\1"? "\1":"<span class=\"error\">\1</span>"', $DateiEcho);
//oder auch mit ASCII Code
$ChgDatei = preg_replace("/((<[^\x40'>]*)|$kw)/ie", '"\2"=="\1"? "\1":"<span class=\"error\">\1</span>"', $DateiEcho);
Bringt aber nichts, in einem anderen Forum hat mir jemand die Zeile aufeschlüsselt:
PHP-Code:
$ChgDatei = preg_replace(
//sollte soweit klar sein..
"
//beginnt den suchstring
/
//sogenannter delimiter.. beginnt den regulären ausdruck
((<[^>]*)|$kw)
//finde alle zeichenfolgen, die als erstes zeichen < haben
gefolgt von beliebig vielen zeichen, die nicht > sind oder aber die genau $kw entsprechen
/
//schließender delimiter beendet den regulären ausdruck
i
//unterscheide nicht zwischen groß- und kleinschreibung
e
//sorge dafür, dass backreferences im ersatzstring evaluiert werden. Damit ist ein ersetzen von PHP-Code vor der ausführung des codes möglich. die rückgabe ist dann das ergebnis der execution
"
//ende des suchstring
, '
"\2"=="\1"? "\1":"<span class=\"error\">\1</span>"
// hier wird es spannend... denn hier kommt das e ins spiel.. wenn zweiter match == erster match, schreibe erster match, sonst schreibe <span class blablubber error>erster match</span>
', $DateiEcho
//mach das ganze mit dem Inhalt von $DateiEcho
);
Ich kapiere aber nicht, wie dann nur außerhalb von Tags gesucht und ersetzt werden kann!
PHP-Code:
((<[^>]*)|$kw)
//finde alle zeichenfolgen, die als erstes zeichen < haben
//gefolgt von beliebig vielen zeichen, die nicht > sind oder aber die genau $kw entsprechen
Denn so gesehen, würde ja nur > nicht gefunden werden oder?!