Gude Steve,
#######################################################
$html =~ s/<img.*src="(/fb[\S|.]*(gif))"/push (@v,$1);/egmi;
#######################################################
Soweit ist alles ok, aber nun moechte ich alle, in dieser Art verlinkten Dateien, welche nicht die Endung .gif haben.
HTML solltest du immer mit Hilfe von HTML::Parser o.ä. parsen; auf diese Weise verarbeitest du das HTML nicht nur ordentlich, sondern du kommst auch sehr bequem an die einzelnen Dateinamen heran - ohne auf das HTML drumherum achten zu müssen.
Ein Beispiel:
#!/usr/bin/perl -w
use strict;
use HTML::Parser;
my $parser = MyParser->new();
$parser->parse_file('path/to/filename');
package MyParser;
use base qw(HTML::Parser);
sub start
{
my (undef, $tag, $attr) = @_;
if ($tag eq 'img') {print $attr->{src}};
}
perldoc HTML::Parser
Zu deiner ursprünglichen Frage:
Du könntest die RegExp aufteilen:
push @non_gif, $filename if $filename =~ m(^/fb) && $filename !~ /gif$/;
oder: "negative look-behind assertion" verwenden.
push @non_gif, $filename if $filename =~ m|^/fb.*(?<!gif)$|;
perldoc perlre
Eine Lösung lässt sich allerdings auch "nur" mit substr finden.
perldoc -f substr
ad,
kd.