Moin!
Hat da jemand eine Idee?
Allgemein wirst Du das nur mit 2 regulären Ausdrücken lösen können. In perl z.B.:
my $tiere= '';
foreach(qw/elefant hund katze maus vogel fisch/) {
$tiere.= $_ . ',';
my $hund= ( $tiere=~ /hund(.*)$/);
my $vogel_nach_hund= ( $1=~ /vogel/ );
print "$tiere =>";
print " hund: ",$hund ? "ja" : "nein";
print ", vogel nach Hund: ", $vogel_nach_hund ? "ja":"nein";
print " gesamt: ", $hund && ! $vogel_nach_hund ? "okay":"nicht okay";
print "\n";
}
Liefert:
elefant, => hund: nein, vogel nach Hund: nein gesamt: nicht okay
elefant,hund, => hund: ja, vogel nach Hund: nein gesamt: okay
elefant,hund,katze, => hund: ja, vogel nach Hund: nein gesamt: okay
elefant,hund,katze,maus, => hund: ja, vogel nach Hund: nein gesamt: okay
elefant,hund,katze,maus,vogel, => hund: ja, vogel nach Hund: ja gesamt: nicht okay
elefant,hund,katze,maus,vogel,fisch, => hund: ja, vogel nach Hund: ja gesamt: nicht okay
Wenn es unbedingt ein einziger Ausdruck sein muß, kannst Du Dir im speziellen mit einem Wust von Alternativen behelfen, im speziellen also:
/hund(?:[^v]|v[^o]|vo[^g]|vog[^e]]voge[^l])*$/
und als Beispiel:
my $tiere= '';
foreach(qw/elefant hund katze maus vogel fisch/) {
$tiere.= $_ . ',';
my $voegelei= ( $tiere=~/hund(?:[^v]|v[^o]|vo[^g]|vog[^e]]voge[^l])*$/);
print "$tiere => ";
print $voegelei ? "okay":"nicht okay";
print "\n";
}
-- Skeeve