(Hallo|Hi(ho)|Tag) roland müller,
es soll im htmlquellcode das wort banane überall ersetzt werden nur nicht in attributen und tags!
Und dann glaubst du, dass dieses Suchmuster funktioniert?
$suchmuster = "(?<!<[^<>]*)banane(?![^<>]*>)";
Ich würde das dann andersrum lösen und nebenbei auf die negative
Lookbehind-Assertion verzichten, weil die in PHPs PCRE in beliebiger Länge nicht erlaubt sind:
// nur ein Beispiel:
$heuhaufen = '<tomate banane >banane</tomate> banane zitrone banane gurke banane erdbeere<banane >orange banane</banane>';
$muster = '/banane(?=[^>]*<[^>]+>)/i';
$ersatz = 'ananas';
$ergebnis = preg_replace($muster, $ersatz, $heuhaufen);
Noch ne kurze Erklärung (nur für den Umstieg von eregi_replace(), den Rest musst du dir schon aus der Doku holen):
Die Schrägstriche "/" am Anfang und am Ende des Musterstrings sind für PCRE notwendig, sonst gibts ne Fehlermeldung.
Das kleine "i" am Ende des Suchmusters sorgt dafür, dass Groß- und Kleinschreibung ignoriert wird.
Die Lookahead-Assertion geht (vereinfachend) davon aus, dass in einem "Tag" keine "kleiner-als"-Zeichen vorkommen.
http://de.php.net/manual/de/reference.pcre.pattern.syntax.php
http://de.php.net/manual/de/reference.pcre.pattern.modifiers.php
B.T.W.: Die Funktion function preg_replace() arbeitet mit "Perl-kompatiblen Regulären Ausdrücken" -- und davon sprach Sven Rautenberg -- und nicht von Perl. ;-)
MffG
EisFuX