Expresión regular para excluir un conjunto de palabras clave

Quiero una expresión que fallará cuando encuentre palabras como “boon.ini” y “http”. El objective sería tomar esta expresión y poder construir para cualquier conjunto de palabras clave.

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

(tomado de la biblioteca de RegexBuddy ) coincidirá con cualquier línea que no contenga boon.ini y / o http. ¿Es eso lo que querías?

Una expresión alternativa que podría ser utilizada:

 ^(?!.*IgnoreMe).*$ 

^ = indica el inicio de la línea
$ = indica el final de la línea
(?! Expression) = indica una coincidencia negativa de anticipación de ancho cero en la expresión

El ^ en la parte delantera es necesario, de lo contrario, cuando se evalúe, la mirada negativa hacia adelante podría comenzar desde algún lugar dentro o más allá del texto “IgnoreMe” y hacer una coincidencia donde no lo desee también.

por ejemplo, si usa la expresión regular:

 (?!.*IgnoreMe).*$ 

Con la entrada “Hello IgnoreMe Please”, esto dará como resultado algo así como: “gnoreMe Please”, ya que la mirada negativa del futuro encuentra que no hay una cadena completa “IgnoreMe” después de la “I”.

En lugar de negar el resultado dentro de la expresión, deberías hacerlo en tu código. De esa manera, la expresión se vuelve bastante simple.

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

Devolvería true si boon.ini o http estaban en cualquier lugar de su cadena. No coincidirá con palabras como httpd o httpxyzzy debido a \b , o límites de palabras. Si lo desea, puede simplemente eliminarlos y coincidirá con ellos también. Para agregar más palabras clave, simplemente agregue más tuberías.

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

Es posible que le sirva escribir una expresión regular que tenga éxito cuando encuentre las palabras que busca, y luego invierta la condición.

Por ejemplo, en Perl usarías:

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

La expresión anterior restringirá solo el símbolo de libra de la cadena. Esto permitirá todos los caracteres excepto la cadena.

¿Qué biblioteca de lenguaje / expresiones regulares? Pensé que tu pregunta estaba en ASP.NET, en cuyo caso puedes ver la sección de “miradas negativas” de este artículo: http://msdn.microsoft.com/en-us/library/ms972966.aspx

Estrictamente hablando, la negación de una expresión regular todavía define un lenguaje regular, pero hay muy pocas bibliotecas / idiomas / herramienta que permitan expresslo.

Negativo lookahed puede servirle a usted de la misma manera, pero la syntax real depende de lo que esté usando. La respuesta de Tim es un ejemplo con (?...)

Utilicé esto (basado en la respuesta de Tim Pietzcker) para excluir las URL de los subdominios que no son de producción para los filtros de perfil de Google Analytics:

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

Puede ver el contexto aquí: Regex para excluir varias palabras

    Intereting Posts