Stefan Welscher: [Regex]Zeichenketten verbieten

Beitrag lesen

/^string1(?!(string2|string3))string4$/

Beispiel:

while (<DATA>)

{
  # String darf weder abcd noch abxy enthalten
  if ($_ =~ /ab(?!(cd|xy))/ ) {
    print "matched in line $.\n";
  }
  else {
    print "no match in line $.\n";
  }
}

DATA
abcdef
wabxye
ab00ef


>   
> Ergibt:  
>   
> no match in line 1  
> no match in line 2  
> matched in line 3  
>   
> Als Ansatz sollte das ausreichen, oder?  
>   
> Siechfred  
  
  
So hätte ich mir das inzwischen auch vorgestellt......  
ABER: Sobald ein OR im Lookaround enthalten ist fängt PERL das Meckern an (darf keine dynamische Länge haben).  
Deshalb fallen die Lookarounds dann eigentlich auch schon wieder als Möglichkeit aus....  
Irgendwie könnte ich es evtl. hinbasteln, wenn ich jeden einzelnn char negieren würde ([^t][^e][^s][^t]), das ganze wird aber auch wieder zunehmend komplizierter, da ich noch zusätzliche Zeichen habe, die ich nicht im String haben will ([^t-\s][^e-\s][^s-\s][^t-\s]) Das ganze jetzt mit 6 Stringfolgen gemacht und man kann mich in ne Anstalt einliefern. Aber sowas wie ein logisches AND gibt es wohl nicht um die Zeichenklassen zu verbinden? (([^t][^e][^s][^t])|[^t][^e][^s][^t][^2])&[^-\s]).  Achso und das ganennte Beispiel würde ja sowieso nicht funktionieren, da ich nicht einen substring suche, der einen text nicht enthält sonder sicherstellen will, dass ein text keinen substring enthält...  
  
Hilfe! Ich dreh hier noch durch!