2012-04-29 13 views
17

Estoy tratando de buscar todas las apariciones de "Tom" que no están seguidas por "Thumb".Exclusión de RegExp, buscando una palabra no seguida por otra

He intentado buscar

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

pero aún así obtener las líneas que coincidan con Tom pulgar.

+1

Incluso en un caso simple como este, siempre es útil tener algo de entrada de muestra y salida esperada. por ejemplo, ¿quieres unir solo 'Tom' o 'Tom + todo al final de la línea'? – alan

+0

Trataré de ser más explícito. Quiero encontrar cualquier aparición de "Tom" en cualquier lugar de una línea, pero no quiero ver ninguna línea que contenga "Tom Thumb" – user1364539

Respuesta

25

Usted no dice qué sabor de expresiones regulares que está utilizando, pero esto debe trabajar, en general:

Tom(?!\s+Thumb) 
+0

Esta es una búsqueda de texto que se ejecuta en el foro del software phpbb. – user1364539

+0

Obténgalos aún :-( – user1364539

+3

¿Qué quiere decir con 'todavía obtenerlos'? ¿Todavía obtener qué? Para que podamos ayudarlo, tendrá que publicar más de su código, algunas entradas de muestra y resultados deseados, y más información sobre lo que está intentando hacer exactamente. Esta expresión regular definitivamente no coincidirá con 'Tom' seguido de 'Thumb' (siempre que su implementación de expresiones regulares soporte negativos). Así que no estoy seguro de qué significa 'todavía obtenerlos'. – alan

1

Tom(?!\s+Thumb) es lo que se busca.

2

En caso de que no están en busca de palabras completas, puede utilizar la siguiente expresión regular:

Tom(?!.*Thumb) 

Ver this regex demo

Si busca palabras completas (es decir, una palabra completa Tom sólo debe haber emparejado si hay toda Thumb ninguna palabra más a la derecha de la misma), utilice

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

Ver another regex demo

Tenga en cuenta que:

  • \b - Coincide con un límite
  • (?!.*Thumb) palabra líder/suelo - es un negativo de búsqueda hacia delanteque falla la comparación si hay algún 0+ caracteres (dependiendo del motor, incluyendo/excluyendo símbolos linebreak) seguido con Thumb.
Cuestiones relacionadas