2009-08-26 9 views
15

Desidero annullare una serie di parole utilizzando java regex.Negazione di un set di parole tramite java regex

Dire, voglio annullare cvs, svn, nvs, mvc. Ho scritto una regex che è ^[(svn|cvs|nvs|mvc)].

Alcuni come sembra non funzionare.

+1

Eventuali duplicati: http://stackoverflow.com/questions/42990/regex-to-match-against-something-that-is-not-a-specific-substring – finnw

+2

Vedi anche: http://stackoverflow.com/questions/406230/regular-expression-to-match-string-not-contain-a-word – finnw

+1

... e http://stackoverflow.com/questions/717644/ regular-expression-that-doesnt-contain-certain-string – finnw

risposta

4

Non è così semplice. Se vuoi negare una parola devi dividerla in lettere e negare ogni lettera.

modo per negare

/svn/ 

si deve scrivere

/[^s][^v][^n]/ 

Quindi, ciò che si desidera filtrare si trasformerà in realtà brutta espressione regolare e penso che sia meglio l'idea di utilizzare questo regex

/svn|cvs|nvs|mvc/ 

e quando si prova la stringa contro di esso, basta annullare il risultato.

In JS questo sarebbe un aspetto più meno così:

!/svn|cvs|nvs|mvc/.test("this is your test string"); 
+0

probabilmente non è corretto, perché non corrisponde l'inizio^e la fine $ della stringa – pvoosten

+0

Bene, sto cercando una qualsiasi delle parole in qualsiasi posizione in una stringa di prova. Se vuoi abbinare solo le parole complete allora^all'inizio e $ alla fine farà il trucco. – RaYell

2

tuo regex è sbagliato. Tra parentesi quadre, puoi inserire caratteri da richiedere o da ignorare. Se non trovi ^(svn|cvs|nvs|mvc)$, stai bene.

+0

che in realtà non è utile in quanto questo non è puramente regex. se non si ha la possibilità di cambiare il codice, questo non risolverà il problema di QA. – Alex

Problemi correlati