2016-05-25 16 views
5

Ho giocato a regex golf e ho identificato una regex che includeva tutte le parole che non dovevo corrispondere e nessuna delle parole che dovrei corrispondere. L'idea era che avrei potuto semplicemente annullare la regex e poi ottenere il contrario (includendo tutte le parole che dovrei corrispondere e nessuna delle altre).Come si nega un'istruzione regolare?

La regex mi si avvicinò con (\w)(\w)\2\1 corrisponde a qualsiasi cosa con un modello abba, così ho pensato utilizzando il Lookaround negativo (?!(\w)(\w)\2\1) mi sarebbe partita con qualsiasi cosa non del modello abba però ora è solo mette in luce tutto ciò, ecco l'URL se si desidera Provalo: http://regex.alf.nu/4

+0

Se questa è un'opzione, usare 'grep -v' –

+2

Come'^(?! \ W * (\ w) (\ w) \ 2 \ 1). * '? –

+0

@InnocentBystander è un'interfaccia web based, quindi grep non è consentito – sreya

risposta

3

Mi sembra che tu voglia escludere stringhe corrispondenti che contengono quei simboli ripetuti. Pertanto, è necessario aggiungere \w* (0 o più caratteri di parole) prima dei caratteri per verificare la ripetizione.

Usa

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

Vedere la regex demo.

Così, il (?!\w*(\w)(\w)\2\1) guarda avanti come segue il controllo a destra all'inizio di una stringa: se ci sono 0+ caratteri alfanumerici/underscore seguiti con 1 e 2 caratteri che sono seguiti con il 2o e quindi i primi caratteri catturati, no la partita viene restituita (la partita è fallita).

Non è necessaria la parte .* se non si intende abbinare il testo (ad esempio, se si controlla solo se vi è una corrispondenza o meno). Tuttavia, se si desidera escludere la corrispondenza con una stringa vuota, utilizzare .+ anziché .* (+ corrispondenze 1 o più occorrenze del subpattern quantificato).

+0

Ahhh l'ancora è necessaria per escludere la stringa vuota allora sì? – sreya

+0

No, per assicurarsi che la stringa non sia vuota, puoi usare '. +' Alla fine. Semplicemente non hai precisato quale sia il comportamento previsto per le partite vuote. –

Problemi correlati