EisFuX: Lieber so ...

Beitrag lesen

(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