Thread Array, Match und $1
(14 answers)
Opened by IceRage at 2011-09-22 22:54 2011-09-23T12:40:19 pq Du machst hier den von GwenDragon geschilderten Fehler und prüfst das Resultat von =~ nicht. Ich habe Dein Beispiel etwas abgewandelt: 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 $ perl -le ' my @array = ("foo bar baz", "FOO BAR BA?", "a b c", "d e f"); for(1..4) { for my $i (0..$#array) { if( $array[$i] =~ m/(\w{3})/g ) { print "$i: $1"; } else { print "$i: no match"; } } }' 0: foo 1: FOO 2: no match 3: no match 0: bar 1: BAR 2: no match 3: no match 0: baz 1: no match 2: no match 3: no match 0: no match 1: FOO 2: no match 3: no match Der g Modifier merkt sich für jeden String die Position des letzten Matches und fängt beim nächsten Mal dort an. Ein fehlgeschlagener Match setzt diese Position zurück. Das sieht man sehr schön beim zweiten String in den Zeilen 21 und 25. In Zeile 21 sieht der Match den String BA?, der nicht auf \w{3} passt. Also wird pos zurückgesetzt. Beim nächsten Match in Zeile 25 wird also wieder von Anfang begonnen und er findet FOO. |