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
#! /usr/bin/perl use strict; use warnings; # Jeder logische Teil (Tag, Stunde, Minute) ist optional; # daher mit nicht-einfangender Klammer gruppiert und mit # Modifier ? versehen my $regex = qr{ (?: # Gruppierung, weil optional (\d+)\s+Tage # Anzahl Tage einfangen; 1. Rueckgabewert )? \s* (?: # Gruppierung, weil optional (\d+)\s+Std\. # Anzahl Stunden einfangen; 2. Rueckgabewert )? \s* (?: # Gruppierung, weil optional (\d+)\s+Min. # Anzahl Minuten einfangen; 3. Rueckgabewert )? }x; while ( my $line = <DATA> ) { my ( $d, $h, $m ) = $line =~ m{$regex}; for ( $d, $h, $m ) { $_ = 0 if !defined $_; } print "$d D, $h h, $m m\n"; } __DATA__ 3 Tage 12 Std. 3 Min. 2 Std. 4 Min. 2 Min. ~
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
#! /usr/bin/perl use strict; use warnings; while ( my $line = <DATA> ) { # Vorbelegung mit 0 my %data = ( "Tage" => 0, "Std." => 0, "Min." => 0, ); # Jedes vorbelegte Element wird nun einzeln geprüft for my $item ( keys %data ) { # der Key wird hierbei als Textelement im Pattern verwendet if ( $line =~ m{(\d+) \Q$item\E} ) { $data{$item} = $1; } } # "formatierte" Kontrollausgabe printf "%2d D, %2d h, %2d m\n", @data{qw( Tage Std. Min. )}; } __DATA__ 3 Tage 12 Std. 3 Min. 2 Std. 4 Min. 2 Min. 7 Min. 8 Std. 9 Tage ~
2012-06-13T13:06:07 pqhttp://perldoc.perl.org/
http://perldoc.perl.org/perlre.html
http://perldoc.perl.org/perlrequick.html
http://perldoc.perl.org/perlretut.html
wird übrigens alles mit perl ausgeliefert.