2014-04-05 11 views
6

Ad esempio, voglio escludere 'montaggio', 'vuoti', 'trilione di'
ma non 'ciao' o 'modello'Escludi stringhe di modello "abba"

ho già ottenuto il seguente al lavoro

(.)(.)\2\1 

che corrisponde a "cavo" o "raccordo", ma ho difficoltà a negarlo.

la cosa più vicina che ottengo è

^.(?!(.)(.)\2\1) 

che esclude 'raccordo' e 'vuota', ma non 'trilione di'

risposta

3

E 'un po' diverso da quello che hai. La tua regex corrente controllerà la pallindromicità (?) Del secondo carattere. Dal momento che si desidera controllare l'intera stringa, è necessario modificare un po 'per:

^(?!.*(.)(.)\2\1) 

Il primo ancoraggio farà in modo che il controllo viene effettuato solo all'inizio (in caso contrario, la regex può vantare una partita al fine della stringa).

Quindi il .* all'interno del lookahead negativo consentirà il controllo da eseguire ovunque all'interno della stringa. Se c'è una corrispondenza, fallisci l'intera partita.

+0

grazie, ha funzionato! il cappello^è la chiave! – user3501363

+0

@ user3501363 Prego! :) Ora hai 193 punti;) – Jerry

2

non corrisponde con trilioni di quanto si è aggiunto ^. significa che deve avere un personaggio prima della partita dall'inizio. Per i primi due casi ha il carattere h e f. Quindi se lo cambi in ^..(?!(.)(.)\2\1) allora funzionerà per trillion.

Quindi, in generale l'espressione regolare sarà:

(?!.*(.)(.)\2\1) 
    ^^ any number of characters(other than \n)