2014-11-27 11 views
8

Ich versuche, eine Zeichenfolge (mit einem Perl Regex) nur wenn es nicht mit "abc:" oder "defg:" beginnt, aber ich kann nicht herausfinden, wie . Ich so etwas wieRegex mit mehreren negativen Lookahead

versucht haben
^(?:(?!abc:)|(?!defg:)) 
+0

fragt nach einer Zeichenfolge, die abc nicht startet: * oder * startet nicht defg :, das ist eine beliebige Zeichenfolge – ysth

Antwort

5

Versuch dies zu tun:

^(?!(?:abc|defg):) 
+0

danke für die Antwort, aber es scheint nicht zu funktionieren. – tobbo

+0

das hat es geschafft, danke! – tobbo

1

... oder könnte den Wechsel von der ursprünglichen Ausdruck fallen gelassen haben:

^(?:(?!abc:)(?!defg:)) 
0

Dies wird die Aufgabe tun:

^(?!(defg|abc):).* 
0

Könnten Sie bitte diese versuchen:

use strict; 
use warnings; 
use Cwd; 

while(<DATA>) 
{ 
    my $line=$_; 
    print $line unless($line=~m/^(abc|defg*)/m); 
} 

__DATA__ 
ebc this is testing ebc 
dbc this is testing dbc 
defg this is testing defg 
abc this is testing abc 
defg this is testing defg 
0

^(?!abc:|defg:)\s*\w+

diese regex Verwendung. Dies wird Zeilenanfang mit "abc:" und "defg:" wie Sie wollen vermeiden.

3

Die Look-Ahead (?=foo), (?!foo) und Lookbehind (?<=), (?<!) verbrauchen keine Zeichen.

Sie können:

^(?!abc:)(?!defg:).* 

oder

^(?!defg:)(?!abc:).* 

Der Auftrag macht keinen Unterschied machen.