2014-11-27 13 views
8

Sto provando a far corrispondere una stringa (usando una regex Perl) solo se non inizia con "abc:" o "defg:", ma non riesco a capire come . Ho provato qualcosa di simileRegex corrispondente a più lookahead negativi

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

che richiede qualsiasi stringa che non avvia abc: * o * non avvia defg :, che è una stringa qualsiasi – ysth

risposta

5

Prova a fare questo:

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

, grazie per la risposta, ma non sembra funzionare. – tobbo

+0

che l'ha fatto, grazie! – tobbo

1

... o avrebbe potuto cadere l'alternanza dall'espressione originale:

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

questo farà il compito:

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

La prego di provare questo:

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+

uso questa espressione regolare. eviterà l'avvio della linea con "abc:" e "defg:" come desiderato.

3

Lookahead (?=foo), (?!foo) e lookbehind (?<=), (?<!) non consumano alcun carattere.

È possibile:

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

o

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

L'ordine di non fare la differenza.