regexp-Problem ... mal wieder

SilentWarrior

Erfahrenes Mitglied
Hi allerseits

Ich habe folgendes Problem: Ich hab mir eine Funktion geschrieben, die mir HTML-Code mit entsprechender Einfärbung generiert (sowas ähnliches wie highlight_string). Jetzt steh ich vor zwei ineinander verschachtelten Problemen. Bisher hab ich's so gemacht:
PHP:
$string = preg_replace("/("(.*?)" )/",
"<span style=\"color:#660000;\">$0</span>",$string);
$string = str_replace("&lt;!--",
"<span style=\"color:#999999;\">&lt;!--",$string);
$string = str_replace("--&gt;","--&gt;</span>",$string);
Dadurch wird aber Kommentartext innerhalb von Anführungszeichen immer noch dunkelrot hervorgehoben, was ich natürlich nicht möchte. Kann man das irgendwie verhindern? Ich steh total aufm Schlauch, wo man da ansetzen müsste. Kann man das mit einem einzigen preg_replace machen? Und wenn ja, wie löse ich das Problem mit dem Ausrufezeichen? Einfach mit \ escapen geht ja leider nicht.

Vielen Dank schonmal für die Hilfe!

Grüsse

SilentWarrior
 
Moin... :-)

Mal davon ausgehend, dass innerhalb von den Kommentaren überhaupt keine Typen gehilightet werden sollen, könntest du alle bis dahin erzeugten Tags einfach wieder entfernen:
PHP:
$string = 	preg_replace
	(
	"/&quot;(.*?)&quot;/s",
	"<span style=\"color:#660000;font-weight:bold;\">\\1</span>",
	$string
	);
$string = preg_replace
	(
	"/&lt;!--(.*?)--&gt;/se",
	"'<span style=\"color:#999999;\">&lt;!--'.strip_tags('\\1').'--&gt;</span>'",
	$string
	);
 
Vielen Dank schonmal! :)

Nur leider kann ich (noch) nicht überprüfen, ob es so funktioniert, da das Problem mit dem Ausrufezeichen weiterhin besteht. Kann man das irgendwie umgehen?
 
:rolleyes: Wenn du es wie in meinem Schnipsel machst, sollte das Problem mit den Ausrufezeichen nicht existieren.... da dort innerhalb von Kommentaren erstmal alle Tags entfernt werden, wird da auch nichts gehighlighted..... oder meinst du etwas anderes?

Zeig doch mal den kompletten Code...vielleicht liegt das Problem woanders :)
 
Also, es funktioniert jetzt. Vielen Dank, fatalus! :) Allerdings hätte ich da noch eine Frage: Wieso man das e am Ende braucht, ist mir klar (strip_tags), aber wozu dient das s? Bei PHP.net steht nur, dass damit auch neue Zeilen berücksichtigt werden - was aber hat das mit meine Script zu tun? Denn komischerweise läuft es ohne dieses s nicht.

Achja, nochmal eine Frage: Macht es einen Unterschied, ob ich \\1 oder $1 schreibe?
 
Zu dem $1 kann ich nichts genaues sagen,aber meines Erachtens ist das Perl-Syntax, in PHP kenn ich das nur mit \\1

Das "s" bewirkt, dass der Punkt auch Zeilenumbrüche einschliesst, sofern welche vorkommen.... ohne das "s" tut er es nicht.....er würden also bei dir ohne "s" nur Kommentare betroffen sein, welche sich nicht über mehrere Zeilen erstrecken.
 
Zurück