2009-07-20 14 views
35

È possibile eseguire la negazione delle stringhe nelle espressioni regolari? Devo abbinare tutte le stringhe che non contengono la stringa "..". So che è possibile utilizzare ^[^\.]*$ per far corrispondere tutte le stringhe che non contengono "." ma devo abbinare più di un carattere. So che potrei semplicemente abbinare una stringa contenente ".." e quindi annullare il valore di ritorno della corrispondenza per ottenere lo stesso risultato, ma mi chiedevo solo se fosse possibile.Negazione delle stringhe utilizzando le espressioni regolari

+0

Collegato: [Espressioni regolari e annullamento di un intero gruppo di caratteri] (http://stackoverflow.com/questions/977251/regular-expressions-and-negating-a-whole-character-group) – Unihedron

risposta

42

È possibile utilizzare lookaheads negativi:

^(?!.*\.\.).*$ 

che provoca l'espressione non corrisponde se si può trovare una sequenza di due periodi in qualsiasi punto della stringa.

+6

Ah, abilità di modifica ninja :) +1 –

5
^(?:(?!\.\.).)*$ 

corrisponderà solo se non ci sono due punti consecutivi in ​​qualsiasi punto della stringa.