Expresiones regulares, ¿cómo coincidir como verdaderas si algo NO existe?


0

Soy bastante decente con las expresiones regulares, pero hay una situación que siempre me preocupa, y es: dar una coincidencia cuando no existe un patrón en una cadena de búsqueda.

Aquí hay un poco de información de fondo:

Utilizo un programa llamado Actual Tools Window Manager, que permite crear reglas basadas en ventanas individuales. Puedo especificar el título de Windows como una cadena exacta o usar una expresión regular para hacer coincidir.

Mi objetivo es hacer que esta regla se active en cualquier ventana que tenga un título que no incluya una cadena específica. La expresión regular es solo un patrón, similar a la función php: preg_match.

No puedo trabajar con grupos de captura y referirme a un grupo de captura (al menos, no logré que eso funcionara).

Como ejemplo, digamos que quiero hacer una regla que se active en todo excepto cuando cmd.exe está en el título.

Abro una línea de comandos para que sea probable que el título tenga: C:\Windows\System32\cmd.exe Quiero que esta ventana se excluya de mi regla basada en la presencia de cmd.exe

Probé cosas como ^cmd.exe pero eso simplemente no funciona.

Herramientas reales utiliza una biblioteca de expresiones regulares compatibles con Perl, por lo que http://www.pcre.org/ todo debería ser posible de alguna manera

¿Cómo puedo hacer una expresión regular que coincida con OK si una determinada cadena no está presente, pero FAIL si esa cadena está presente?

Respuestas:


1

Esta expresión regular hace el trabajo:

^(?:(?!cmd\.exe).)*$

Explicación:

^               : begining of string
  (?:           : start non capture group
    (?!         : start negative lookahead
      cmd\.exe  : literally (you may add wordboundaries \bcmd\.exe\b if you don't want to match mycmd.exe)
    )           : end lookahead
    .           : 1 any character but newline
  )*            : end group, repeated 0 or more times
$               end of string

Ejemplos:

C:\Windows\System32\cmd.exe         --> Doesn't match
C:\Windows\System32\mycmd.exe       --> Doesn't match without wordboundaries, else Match
C:\Windows\System32\cmd             --> Match
C:\Windows\System32\exe             --> Match
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.