Mit Programm Kommentar entfernen
Bernd
- software
Hallo,
ich suche ein Programm, dass mir aus php und xhtml Dateien die Kommentare entfernt. Kennt jemand ein solches Programm.
mfg Bernd
Hi!
ich suche ein Programm, dass mir aus php und xhtml Dateien die Kommentare entfernt. Kennt jemand ein solches Programm.
Dazu öffne ich eine Shell und mache das mit einer Zeile Perl und einem regulären Ausdruck.
Hast du irgendeine Scriptsprache auf deinem Rechner installiert? Perl, Python, PHP, ...?
Gruß, rob
Hi rob,
ich habe php auf meinem rechner laufen. Wie würde denn der Reguläre Ausdruck aussehen?
mfg Bernd
Hallo (name),
ich habe php auf meinem rechner laufen. Wie würde denn der Reguläre Ausdruck aussehen?
für (X)HTML: /<?--.*?(-->)/
für PHP:
1.: /#.*?\n/
2.: //\.*?(\/)/
Wenn ich einen Fehler gemacht habe möge man mir diesen verzeihen ;-)
Gruß
Alexander Brock
Moin!
ich habe php auf meinem rechner laufen.
Das ist doch schon mal was. Du weißt, daß du PHP auch auf der Kommandozeile aufrufen kannst?
php -f dein_script.php (auf Windows; auf Unix einfach Hashbang-Zeile schreiben und chmod +x datei)
Dann brauchst Du das nicht über deinen Webserver laufen lassen.
Ja, und dann mit fopen() eine Datei öffnen und den Inhalt in einen String lesen, RegEx drüber jagen und in Datei schreiben.
Wie würde denn der Reguläre Ausdruck aussehen?
hmm... So vielleicht:
$neu = preg_replace( '/(<!--)(.*)(-->)/', "", $suchtext );
Gruß, rob
Hi,
ich hatte auf eine einfache Lösung gehofft, aber das scheint mir etwas kompliziert. Ich glaube ich mach das doch lieber von Hand.
Trotzdem Danke für die Hilfe und schöne Weihnachten.
mfg Bernd
Huhu Bernd
ich hatte auf eine einfache Lösung gehofft, aber das scheint mir etwas kompliziert. Ich glaube ich mach das doch lieber von Hand.
Es ist tatsächlich nicht so einfach.
Der reguläre Ausdruck zum Entfernen von Kommentaren sieht ungefähr so aus
#([^"'/#<]+|'[^'\]*(?:.[^'\]*)*'[^"'/#<]*|"[^"\]*(?:.[^"\]*)*"[^"'/#<]*|<<<\s?(\S+)\b.*^\2[^"'/#<]*)|/\[^*]*\+(?:[^/*][^*]*\*+)*/|//[^\n]*|#[^\n]*#ms
Den habe ich hier nur gepostet um die Komplexität der Aufgabe zu verdeutlichen, so einen Klopps nachzuvollziehen ist ja eine Strafe ;-)
Du kannst im einfachsten Fall den Tokenizer von PHP benutzen, ein Beispiel
dazu gibt es da
http://manuals.phpforum.de/php/ref.tokenizer.php
Eine Funktion die den oben genannten Regulären Ausdruck benutzt findest Du
z.B. dort
Viele Grüße
lulu
Hallo lulu,
Der reguläre Ausdruck zum Entfernen von Kommentaren sieht ungefähr so aus
#([^"'/#<]+|'[^'\]*(?:.[^'\]*)*'[^"'/#<]*|"[^"\]*(?:.[^"\]*)*"[^"'/#<]*|<<<\s?(\S+)\b.*^\2[^"'/#<]*)|/\[^*]*\+(?:[^/*][^*]*\*+)*/|//[^\n]*|#[^\n]*#ms
Was für Kommentare soll dieser Ausdruck denn alles entfernen?
Ich kenne bis jetzt nur 4 Arten:
//
/**/
<!-- -->
Da fällt mir auf, ich hab Fehler gemacht :-(
Meine Regulären Ausdrücke müssten so heißen:
/(#|//).*?\n/
//\.*?(\/)/
/<!--.*?(-->)/
Gruß
Alexander Brock
Huhu Alexander
#([^"'/#<]+|'[^'\]*(?:.[^'\]*)*'[^"'/#<]*|"[^"\]*(?:.[^"\]*)*"[^"'/#<]*|<<<\s?(\S+)\b.*^\2[^"'/#<]*)|/\[^*]*\+(?:[^/*][^*]*\*+)*/|//[^\n]*|#[^\n]*#ms
Was für Kommentare soll dieser Ausdruck denn alles entfernen?
Ich kenne bis jetzt nur 4 Arten://
/**/
<!-- -->
Die ersten drei der genannten, was die Sache kompliziert und den Ausdruck
so umfangreich macht ist die Notwendigkeit Kommentarzeichen innerhalb von Strings von der Entfernung auszunehmen.
Das folgende sind z.B. Klippen die umschifft werden müssen
<?php
$rgb = '#cc0023';
/* ein Kommentar */
$a = 'Ein Kommentar sieht z.B. so aus: /* [...] */';
?>
Viele Grüße
lulu
Wie würde denn der Reguläre Ausdruck aussehen?
hmm... So vielleicht:
$neu = preg_replace( '/(<!--)(.*)(-->)/', "", $suchtext );
Das sieht aber gierig aus! Sollte hinter dem .* kein Fragezeichen stehen?
Gruß
Reiner
Hi Reiner,
$neu = preg_replace( '/(<!--)(.*)(-->)/', "", $suchtext );
Das sieht aber gierig aus! Sollte hinter dem .* kein Fragezeichen stehen?
Warum das? Damit .* 0 oder einmal vorkommen kann? Was du machen willst ist vermutlich, dass auch leere Kommentare entfernt werden, oder?
Du hast vermutlich übersehen, dass * ja 0 bis unendlich mal heißt und somit <!----> schon gematched würde.
MfG, Dennis.
Hi,
$neu = preg_replace( '/(<!--)(.*)(-->)/', "", $suchtext );
Das sieht aber gierig aus! Sollte hinter dem .* kein Fragezeichen stehen?
Warum das? Damit .* 0 oder einmal vorkommen kann? Was du machen willst ist vermutlich, dass auch leere Kommentare entfernt werden, oder?
Nein,
um bei
bla<!-- comment -->blubb<!-- comment -->bla
das blubb zu erhalten (wie bei Veronas Spinat).
Mit
/(<!--)(.*)(-->)/
wird alles zwischen den zwei bla gefunden.
Mit
/(<!--)(.*?)(-->)/
wird nur das zwischen bla und blubb bzw. das zwischen blubb und bla gefunden.
cu,
Andreas
Hi MudGuard,
bla<!-- comment -->blubb<!-- comment -->bla
Mit
/(<!--)(.*)(-->)/
wird alles zwischen den zwei bla gefunden.
Mit
/(<!--)(.*?)(-->)/
wird nur das zwischen bla und blubb bzw. das zwischen blubb und bla gefunden.
Also wäre ersteres ein "gefräßiger" RegEx und letzteres ein "ungreede" RegEx? Ließe sich selbiges nicht durch den Modifier U (in PHP) realisieren?
MfG, Dennis.