Pregunta

Quiero una expresión que falle cuando encuentre palabras como "boon.ini" y "http".El objetivo sería tomar esta expresión y poder construirla para cualquier conjunto de palabras clave.

¿Fue útil?

Solución

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

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

Otros consejos

Una expresión alternativa que podría usarse:

^(?!.*IgnoreMe).*$

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

El ^ en el frente 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 usted tampoco la desee.

p.ej.Si usas la expresión regular:

(?!.*IgnoreMe).*$

Con la entrada "Hola, ignórame, por favor", esto dará como resultado algo como:"gnoreMe Please", ya que la mirada negativa hacia adelante descubre que no hay una cadena completa 'IgnoreMe' después de la 'I'.

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

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

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

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

le vendría bien escribir una expresión regular que tener éxito cuando encuentre las palabras que está buscando 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 almohadilla de la cadena.Esto permitirá todos los caracteres excepto la cadena.

¿Qué idioma/biblioteca de expresiones regulares?Pensé que tu pregunta era sobre ASP.NET, en cuyo caso puedes ver la sección "cabeza de búsqueda negativa" 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/herramientas que permitan expresarlo.

La apariencia negativa puede servirle igual, pero la sintaxis 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 subdominios que no son de producción para los filtros de perfil de Google Analytics:

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top