1 2 3 4 5
my $str='P=HierStehtIrgendwas,I=NocheinText'; if($str=~/P=(.+?),I=/) { print "VAL1 = $1\n"; }
1 2 3 4 5 6
# not tested my $str='P=HierStehtIrgendwas,I=NocheinText'; if( $str=~/P=(.+?),I=(.+?)$/ ) { print "P-VAL = $1\n"; print "I-VAL = $2\n"; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# untested my $str='P=HierStehtIrgendwas,I=NocheinText'; # long way (with room for further checks (defined, valid values, ...) my %data; for my $pair ( split /,/, $str ) { my ( $key, $value ) = split /=/, $pair; $data{$key} = $value; } # if you are sure, that data in $str is always valid my %data = split /[=,]/, $str;
2012-04-23T09:19:34 LinuxerCode (perl): (dl )1 2 3 4 5 6# not tested my $str='P=HierStehtIrgendwas,I=NocheinText'; if( $str=~/P=(.+?),I=(.+?)$/ ) { print "P-VAL = $1\n"; print "I-VAL = $2\n"; }
Wenn zwischen den beiden andere Teilstrings auftauchen, gibt es auch keinen Match (P=bla,Q=ups,I=blubb).
if( $str=~/P=(.+?),I=(.+?)$/ ) {
2012-04-23T11:47:28 maxrittiHi,
tjo, warum mit Perl?
Ich fange damit halt gerade ein wenig an und dachte, dass das gut passt zu dem was ich brauche.
Substr hatte ich auch schon unter der Tastatur, habs dann aber vertagt.
Wie immer gibts ja mehrere Wege zum Ziel :)
2012-04-23T11:47:28 maxrittiAllerdings das mit dem Teilstrings, die da auftauchen können (also zwischen P= und I=) verstehe ich nicht ganz.
Code: (dl )if( $str=~/P=(.+?),I=(.+?)$/ ) {
Bedeutet (.+?) nicht, dass egal was für Zeichen auftauchen, bis zu ,I= gelesen wird?
darunter würde dann doch auch ,O= fallen.
1 2 3 4 5 6 7 8 9 10
my $str = "text "; # text mit 3 Leerzeichen am Ende # gierig schnappt sich auch die Whitespaces am Ende if ( $str =~ m/(.+)\s*$/ ) { print ">$1<\n"; } # nicht gierig schnappt sich die Whitespaces am Ende nicht if ( $str =~ m/(.+?)\s*$/ ) { print ">$1<\n"; }
2012-04-23T14:19:01 LinuxerHi,
ich fragte nur nach "Warum Regex?" nicht "Warum Perl?" und aus Neugierde warum Du Dich auf Regex festlegst.