preg_replace wenn ein bestimmter Text NICHT vorkommt

SilentWarrior

Erfahrenes Mitglied
Hi

Ich sitz jetzt schon seit etwa einer halben Stunde am gleichen Problem (hab auch schon gesucht und so), nämlich: Ich will gerne einen String mit preg_replace ersetzen, wenn ein bestimmter String darin nicht vorkommt. Ich hoffe mal, ihr versteht, was ich meine. Wie geht das? Ich hab's schon mit ^ probiert, weiss aber nicht genau, wie man da ganze Strings (und nicht nur einzelne Zeichen) verbietet.

Danke schonmal für die Hilfe! :)

Grüsse

SilentWarrior
 
Oder so?
Code:
/test([xyz]?)abcdefg{0}usw, lala/i
Auf welche Zeciehn sich das {0} bezieht, weiß ich nicht genau, sollte aber
abcdefg sein.

Ansonsten, wie Tim schon sagte:

Und eine genauere Frage würde helfen :)

Edit: Und Regex bei einzelnen zeichen:
Code:
/lala[^abc]lala/i
Beachte aber, dass hier die eckige Klammer ein Zeichen trifft, das nicht abc
entspricht.

Also konkret:
Code:
/lal\"[^\"](.*)\"/i
hier würde AFAIK das erste Zeichen innerhalb der Quotes nicht in $1 mit
drin sein.
 
Zuletzt bearbeitet von einem Moderator:
Hm ich werd wohl mal den Quelltext posten:
PHP:
$string = preg_replace("/("([^["]]*)" )/",
"<span style=\"color:#660000;\">\\0</span>",$string);
Es geht darum, bei HTML-Quellcode die Teile innerhalb von " dunkelrot zu markieren. Wenn ich den Teil in der Mitte jedoch weglass, markiert der mir immer alles vom ersten bis zum letzten " rot, und das will ich natürlich nicht.
 
Hier hast du natürlich das Problem, dass in eckigen Klammern jeders Zeichen
als einzelnes gewertet wird und nicht in einem zusammenhängenden String.

Mein Vorschlag wäre folgender:
Du wendest htmlspecialchars, oder was auch immer die Quotes umwandelt erst
danach an und versuchst es mit dem Pattern:
Code:
/\"(.[^\"]*)\"/
 
Meinen allerherzlichsten Dank, es funktioniert jetzt. Hab's so gelöst:
PHP:
$string = str_replace("&quot;","~",$string);
$string = preg_replace("/(~([^~]*)~)/",
"<span style=\"color:#660000;\">&quot;\\\\2&quot;</span>",$string);
 
Hm, warum nicht einfach so?
PHP:
$string = preg_replace("/&quot;(.*)&quot;/U","<span style=\"color:#660000;\">&quot;$1&quot;</span>",$string);
 
Zuletzt bearbeitet:
Jap, oder eben:
PHP:
$string = preg_replace("/&quot;(.*?)&quot;/","<span style=\"color:#660000;\">&quot;$1&quot;</span>",$string);
;)

? verhindert, wie U, das .* gierig ist.
 
Zurück