regex für kommentare im HTML
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausdruck
befreien
code
einzige kleine erweiterung
ersetzen
ersten vorschlag
erstenmal
hoffnung
http
kommentar
lauten code
letzten kommentar
natur
probe
problem
tun
url
versagen
vorkommen
welt
-
heyho =)
ich hab mal ne frage. unzwar bastel ich an einem kleinen content cleaner, der mir aber immer alles ratzeputze kaputthaut, und nicht aufräumt! find ich garnicht lustig, und es bringt mich leider nichtmehr weiter zu googln, weil ich nich ganz weiterkomme.
kurz:
ich hab HTML code und will ihn aufräumen, unter anderen will ich ihn von Kommentaren befreien:
$search = ' / <!-- .* --> / ';
hab ic jetzt mal als probe, in der hoffnung dass er alles dazwischen findet. findet er auch, unzwar alles was zwischen dem erstenmal vorkommen, und em letzten mal vorkommen steht wenn ich das richtig gesehen habe. wie kann ich zuverlässig solche HTML kommentare entfernen? jemand da mal ne lösung für mich =( ich will nich immer sämtlichen content löschen -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das Problem ist wahrscheinlich, dass .* auch auf <!-- ... --> passt, und deshalb alles zwischen dem ersten und dem letzten Kommentar entfernt wird.
Das hier ist zwar ungetestet, sollte aber hinhauen:
"#<!--[^(-->)]+#"
-
damit wird der code zwar nichtmehr gelöscht, aber die kommentare wurden auch nicht gelöscht.
ich hab nu aber den fehler an meinem ausdruck, der müsste so lauten:
/<!--.+?-->/s
trotzdem danke =) -
Mein Lieblingstool um regex in Echzeit auszuwerten: JRX: real-time JavaScript RegExp evaluator
Unten den Text reinklopfen und oben evaluieren.
HP -
Spätestens bei Conditional Statements bekämest du mit dem Regex Probleme.
Hier mal ein (unausgereifter) Vorschlag:
/<!--[^\[](.|\s)*?-->/s
Was es ersetzen sollte:
<!-- Hallo welt --> <!-- Hallo welt //-->
usw...
Was es nicht ersetzen sollte:
<!--[if IE 7]> <link rel="stylesheet" href="/css/ie7.css" type="text/css" media="screen" /> <![endif]-->
usw...
Unter gewissen Umständen wird der Regex auch hier versagen. Dann wäre aber auch die Quellsyntax eh falsch =)
Also:
preg_replace("/<!--[^\[](.|\s)*?-->/s", "", $str);
Beitrag zuletzt geändert: 3.2.2011 2:23:56 von fabo -
Geht viel einfacher:
Das Problem am ersten Ausdruck ist die Natur des Regex, diese ist nämlich greedy (en: gierig). Das bedeutet, dass immer das größtmögliche Ergebnis gesucht wird und damit sich der Ausdruck ungreedy verhält, muss man ihn mit der Modifikator u versehen. Die einzige kleine Erweiterung zu deinem ersten Vorschlag wäre also:
Fertig.$search = ' / <!-- .* --> /u ';
@fabo
Wer solchen Schmarrn á la
in seinen Code einbaut, anstatt einfach anständige PHP-Conditions und bedingte Includes einzusetzen, der ist selber Schuld. Und keiner der n bisschen was von PHP versteht, würde soetwas jemals tun.<!--[if IE 7]>
Liebe Grüße
- VampireSilence
Beitrag zuletzt geändert: 3.2.2011 12:28:40 von vampiresilence -
präprozessoranweisungen im HTML? sowas gibts?
was soll der müll denn, und vor allem: wozu ist der gut?
das hab ich noch nie gesehen 0.0 erklär das mal bitte einer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage