Skeeve: Reguläre Ausdrücke: Ausschluß eines Teilstrings

Beitrag lesen

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