Zeilen zählen ohne Kommentare
Christoph
- perl
Hallo,
ich will nen kleinen Zeilenzähler in Perl für meinen C-Code schreiben. Dabei sollen aber Kommentarzeilen nicht mit beachtet werden.
Da es ja auch Kommentarzeilen über mehrere Zeilen geben kann, aber ich mir gedacht, daß ich erstmal per join alle Zeilen zusammenfasse, dann sämtliche Kommentare rausschmeiße und dann die Zeilen wieder trenne & zähle.
Wie ist jetzt der reguläre Ausdruck dafür, daß ich nur die Kommentare raus schmeiße ?
Ein Kommentar fängt mit /* an und hört mit */ auf. Wenn ich folgendes habe:
Dies /*ist*/ ein /*Test*/ mit Kommentaren.
dann schmeißt er mir alles zwischen "Dies" und "mit" raus. Ich hätte aber gerne, daß das "ein" auch drin bleibt.
Hier das Teil, was ich momentan habe:
$test =~ s/[/\].*[\/]//g;
Aber da gabs doch noch irgendwas, daß er nicht bis zum letzten Vorkommen von */ geht, sondern beim ersten Vorkommen aufhört.
Gruß,
Christoph
Hallo Christoph,
$test =~ s/[/\].*[\/]//g;
afaik müssen / und * in Zeichenklassen nicht maskiert werden.
Aber da gabs doch noch irgendwas, daß er nicht bis zum letzten Vorkommen von */ geht, sondern beim ersten Vorkommen aufhört.
ja: http://de.selfhtml.org/cgiperl/sprache/regexpr.htm#gierig_genuegsam
Grüße aus Nürnberg
Tobias
Привет Christoph.
Dies /*ist*/ ein /*Test*/ mit Kommentaren.
$test =~ s/[/\].*[\/]//g;
Wie wäre es, die Quelldatei Zeile für Zeile durchzugehen und den Teilenzähler nur dann um 1 zu erhöhen, wenn der RegEx nicht passt? Denkbare Variante (meine C-Kenntnisse tendieren allerdings gen Null):
while(<INFILE>) {
# entweder /* oder */
if($_ !~ /(/\/)|(\/)/) { $z++; }
}
Дружба!
Siechfred