Domanda

Voglio un'espressione che fallirà quando incontra parole come " boon.ini " e " http " ;. L'obiettivo sarebbe quello di prendere questa espressione ed essere in grado di costruire per qualsiasi set di parole chiave.

È stato utile?

Soluzione

^(?:(?!boon\.ini|http).)*$\r?\n?

(tratto dalla libreria di RegexBuddy ) corrisponderà a qualsiasi riga che non contiene boon.ini e / o http. È quello che volevi?

Altri suggerimenti

Un'espressione alternativa che potrebbe essere utilizzata:

^(?!.*IgnoreMe).*$

^ = indica l'inizio della riga
$ = indica la fine della riga
(?! Expression) = indica la larghezza zero guarda avanti corrispondenza negativa sull'espressione

Il ^ nella parte anteriore è necessario, altrimenti quando valutato lo sguardo negativo in avanti potrebbe iniziare da qualche parte all'interno / oltre il testo 'IgnoreMe' - e creare una corrispondenza dove non lo si desidera .

es. Se usi regex:

(?!.*IgnoreMe).*$

Con l'input "Ciao IgnoreMe, per favore", ciò comporterà qualcosa del tipo: "quotneme, per favore" poiché lo sguardo negativo in avanti rileva che non esiste una stringa completa "IgnoreMe" dopo "I".

Invece di negare il risultato all'interno dell'espressione, dovresti farlo nel tuo codice. In questo modo, l'espressione diventa piuttosto semplice.

\b(boon\.ini|http)\b

Restituirebbe true se boon.ini o http si trovasse in un punto qualsiasi della stringa. Non corrisponderà a parole come httpd o httpxyzzy a causa del \ b o dei limiti di parola. Se vuoi, puoi semplicemente rimuoverli e corrisponderà anche a quelli. Per aggiungere più parole chiave, basta aggiungere più pipe.

\b(boon\.ini|http|foo|bar)\b

potresti essere ben servito scrivendo una regex che avrà successo quando incontra le parole che stai cercando, e quindi inverti la condizione.

Ad esempio, in perl useresti:

if (!/boon\.ini|http/) {
    # the string passed!
}
^[^£]*$

L'espressione sopra limiterà solo il simbolo della sterlina della stringa. Ciò consentirà tutti i caratteri tranne la stringa.

Quale libreria di lingua / regexp? Pensavo che la tua domanda riguardasse ASP.NET, nel qual caso puoi vedere il "negativo lookhead" sezione di questo articolo: http://msdn.microsoft.com/en-us/library/ms972966. aspx

Negazione rigorosa di un'espressione regolare, definisce ancora un linguaggio regolare ma ci sono pochissime librerie / lingue / strumenti che consentono di esprimerlo.

L'aspetto negativo può esserti utile ma la sintassi effettiva dipende da cosa stai usando. La risposta di Tim è un esempio con (?...)

L'ho usato (basato sulla risposta di Tim Pietzcker) per escludere gli URL dei sottodomini non di produzione per i filtri del profilo di Google Analytics:

^\w+-*\w*\.(?!(?:alpha(123)*\.|beta(123)*\.|preprod\.)domain\.com).*$

Puoi vedere il contesto qui: Regex per escludere più parole

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top