2014-09-20 14 views
5

Ho trovato molte domande qui su come escludere una sottostringa dai risultati, ma voglio escludere le linee che sono corrispondenze esatte e semplicemente non riesco a capire come farlo.Come escludere stringhe esatte (non sottostringhe) dalle corrispondenze nell'espressione regolare?

Con i dati di prova di seguito, come dovrei corrispondere a tutto eccetto per 11 e 111?

0 
1 
00 
01 
10 
11 
000 
001 
010 
011 
100 
101 
110 
111 
0000 
0001 
0010 
0011 
0100 
0101 
0110 
0111 
1000 
1001 
1010 

Ho provato varie cose, come questa:

^((?!11|111).)*$ 

Ma che esclude le partite sottostringa, quando ancora una volta Sono voler escludere le corrispondenze esatte.

E 'possibile con regex? In tal caso, in che modo è possibile raggiungere le esatte esatte?

+0

Forse questo è un compito non-regex? Cioè facendo alcuni semplici confronti tra stringhe, completamente senza regex? –

risposta

6

È necessario avere fine-of-line incluso nel aspetto negativo avanti:

^(?!(11|111)$).*$ 

See live demo (utilizzando i dati)

Senza compresa la linea di fine, è si sta solo affermando che l'input non è11 o 111, quando ciò che si desidera è affermare è che l'intero input (dall'inizio alla fine) non è 11 o 111.

1

Attraverso PCRE verbo (*SKIP)(*F),

^(?:11|111)$(*SKIP)(*F)|.+ 

DEMO

O

^(?:(?!^(?:111|11)$).)++$ 

DEMO

+0

Perché il tuo lookahead negativo all'interno del gruppo? Ciò renderà molto più lenta la regex ... – Jerry

+0

E puoi usare '111?' Per far corrispondere '11' o' 111'. – Jerry

Problemi correlati