2012-04-29 9 views
17

Sto cercando di cercare tutte le occorrenze di "Tom" che non sono seguite da "Thumb".Esclusione RegExp, ricerca di una parola non seguita da un'altra

Ho provato a cercare

Tom ^((?!Thumb).)*$ 

ma ho ancora ottenere le linee che corrispondono a Pollicino.

+1

Anche in un caso semplice come questo, è sempre utile avere un input di esempio e un output previsto. ad esempio, vuoi abbinare solo "Tom" o "Tom + tutto alla fine della riga"? – alan

+0

Proverò ad essere più esplicito. Voglio trovare qualsiasi occorrenza di "Tom" ovunque in una riga, ma non voglio vedere alcuna riga che contenga "Tom Thumb" – user1364539

risposta

25

Tu non dici che sapore di regex si sta utilizzando, ma questo dovrebbe funzionare in generale:

Tom(?!\s+Thumb) 
+0

Questa è una ricerca di testo eseguita nel forum del software phpbb. – user1364539

+0

Ancora li prendo :-( – user1364539

+3

Cosa intendi con 'ancora ottenerli'? Ancora ottenere cosa? Per aiutarci, dovrai pubblicare più codice, alcuni esempi di input e output desiderati, e altro ancora informazioni su cosa esattamente stai cercando di fare. Questa regex sicuramente non corrisponderà a 'Tom' seguita da 'Thumb' (a patto che l'implementazione delle espressioni regolari supporti lookahead negativi). Quindi non sono sicuro di cosa significhi 'ancora ottenerli'. – alan

1

Tom(?!\s+Thumb) è quello che si cerca.

2

Nel caso in cui non sono alla ricerca di parole intere, è possibile utilizzare la seguente espressione regolare:

Tom(?!.*Thumb) 

Vedi this regex demo

Se siete alla ricerca di parole intere (cioè una parola intera Tom dovrebbe essere solo abbinato se non c'è parola intera Thumb più a destra di esso), utilizzare

\bTom\b(?!.*\bThumb\b) 

Vedi another regex demo

Nota che:

  • \b - corrisponde a una porta/parola finale confine
  • (?!.*Thumb) - è un lookahead negativo che fallisce il match se ci sono 0+ caratteri (a seconda del motore compreso/esclusi i simboli di interruzione di linea) seguiti con Thumb.
Problemi correlati