Expresión regular para una cadena que contiene una palabra pero no otra

Estoy configurando algunos objectives en Google Analytics y podría utilizar un poco de ayuda de expresiones regulares.

Digamos que tengo 4 URL

http://www.anydotcom.com/test/search.cfm?metric=blah&selector=size&value=1 http://www.anydotcom.com/test/search.cfm?metric=blah2&selector=style&value=1 http://www.anydotcom.com/test/search.cfm?metric=blah3&selector=size&value=1 http://www.anydotcom.com/test/details.cfm?metric=blah&selector=size&value=1 

Quiero crear una expresión que identifique cualquier URL que contenga el selector de cadena = tamaño pero NO contiene detalles.cfm

Sé que para encontrar una cadena que NO contenga otra cadena, puedo usar esta expresión:

 (^((?!details.cfm).)*$) 

Pero no estoy seguro de cómo agregar la porción del selector = tamaño .

¡Cualquier ayuda sería muy apreciada!

Esto debería hacerlo:

 ^(?!.*details\.cfm).*selector=size.*$ 

^.*selector=size.*$ debe ser lo suficientemente claro. El primer bit, (?!.*details.cfm) es una búsqueda anticipada negativa: antes de hacer coincidir la cadena, verifica que la cadena no contenga “details.cfm” (con cualquier número de caracteres antes).

regex podría ser (syntax perl):

 `/^[(^(?!.*details\.cfm).*selector=size.*)|(selector=size.*^(?!.*details\.cfm).*)]$/` 
 ^(?=.*selector=size)(?:(?!details\.cfm).)+$ 

Si su motor regex admite cuantificadores posivos (aunque sospecho que Google Analytics no lo hace), entonces supongo que funcionará mejor para los grandes conjuntos de entrada:

 ^[^?]*+(? 

Estaba buscando una manera de evitar –línea amortiguada en una cola en una situación similar a la OP y la solución de Kobi funciona muy bien para mí. En mi caso, excluyendo líneas con “bot” o “spider” mientras incluyo ‘/’ (para mi documento raíz).

Mi comando original:

 tail -f mylogfile | grep --line-buffered -v 'bot\|spider' | grep ' / ' 

Ahora se convierte en (con “-P” interruptor perl):

 tail -f mylogfile | grep -P '^(?!.*(bot|spider)).*\s\/\s.*$' 

Una forma simple de hacerlo es especificar 0 instancias de la cadena haciendo lo siguiente

 (string_to_exclude){0}