Thread Regex bei Zeichenkette über mehrere Zeilen
(12 answers)
Opened by Joeyx at 2014-01-09 13:48
Mir fehlen schlicht Informationen, um Dir das sauber zu beantworten.
Und um Dir pauschal einen Lösungsansatz in Code zu erarbeiten, fehlt mir die Zeit. Kurzer Schnellschuß, ungetestet und auf die Schnelle geraten: edit: Schnellschuß war fehlerhaft Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 # zeilenweise lesen while ( my $line = <$DATENQUELLE> ) { while ( $line =~ m/comment:[^)]*$/ ) { # solange ein Kommentar beginnt && noch nicht mit ) abgeschlossen wurde, chomp $line; # entferne Newline $line .= <$DATENQUELLE>; # und lese die nächste Zeile und füge sie hinten an } # REMARK: Das geht solange, bis eine ) am Ende von $line auftaucht # ... Hier die normale Auswertung dann } Hier ein kleines Beispiel, wie ich mir das vorstellte: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #! /usr/bin/perl use strict; use warnings; while ( my $line = <DATA> ) { # mehrzeilige Kommentare zusammenfassen while ( $line =~ m/:comment/ && $line !~ m/\)$/ ) { # lese naechste Zeile aus; Ende, falls EOF erreicht defined( my $add = <DATA> ) or last; # fuege naechste Zeile hinzu $line .= $add; } # ersetze \n durch " " in mehrzeilige Kommentaren $line =~ tr/\n/ / if $line =~ m/:comment/; # NORMALE AUSWERTUNG folgt hier: if ( $line =~ m/:comment \((.*)\)/ ) { print "Kommentar: $1\n"; } } __DATA__ :data ( :subdata ( :whatever () :comment ("kommentar 1") ) :subdata ( :whatever () :comment ("kommentar 2a 2b") ) :subdata ( :whatever () :comment ("kommentar 3a 3b 3c") ) ) Resultat: Last edited: 2014-01-09 22:41:52 +0100 (CET) meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |