RegEx para excluir una constante de cadena específica

¿Se puede utilizar la expresión regular para hacer coincidir cualquier cadena, excepto una constante de cadena específica, digamos “ABC”? ¿Es posible excluir solo una constante de cadena específica? Gracias tu ayuda de antemano.

Debe usar una afirmación de búsqueda anticipada negativa.

(?!^ABC$) 

Por ejemplo, podría usar lo siguiente.

 (?!^ABC$)(^.*$) 

Si esto no funciona en su editor, intente esto. Está probado para trabajar en ruby ​​y javascript:

 ^((?!ABC).)*$ 

Esto no es fácil, a menos que su motor regexp tenga un soporte especial para él. La manera más fácil sería usar una opción de concordancia negativa, por ejemplo:

 $var !~ /^foo$/ or die "too much foo"; 

Si no, tienes que hacer algo malvado:

 $var =~ /^(($)|([^f].*)|(f[^o].*)|(fo[^o].*)|(foo.+))$/ or die "too much foo"; 

Ese básicamente dice “si comienza con no- f , el rest puede ser cualquier cosa, si comienza con f , no- o , el rest puede ser cualquier cosa; de lo contrario, si comienza por, el siguiente carácter mejor no sería otro o “.

En .NET puede usar la agrupación para su ventaja de esta manera:

http://regexhero.net/tester/?id=65b32601-2326-4ece-912b-6dcefd883f31

Notarás que:

 (ABC)|(.) 

Tomará todo excepto ABC en el segundo grupo. El paréntesis rodea a cada grupo. Entonces (ABC) es el grupo 1 y (.) Es el grupo 2.

Así que solo agarras el segundo grupo como este en un reemplazo:

 $2 

O en .NET mira la colección de Grupos dentro de la clase Regex para un poco más de control.

Debería poder hacer algo similar también en la mayoría de las otras implementaciones de expresiones regulares.

ACTUALIZACIÓN: Encontré una forma mucho más rápida de hacer esto aquí: http://regexhero.net/tester/?id=997ce4a2-878c-41f2-9d28-34e0c5080e03

Todavía usa la agrupación (no puedo encontrar una manera que no use la agrupación). Pero este método es más de 10 veces más rápido que el primero.

Puede usar lookahead negativo, o algo como esto:

 ^([^A]|A([^B]|B([^C]|$)|$)|$).*$ 

Tal vez podría simplificarse un poco.

Prueba esta expresión regular:

 ^(.{0,2}|([^A]..|A[^B].|AB[^C])|.{4,})$ 

Describe tres casos:

  1. menos de tres caracteres arbitrarios
  2. exactamente tres caracteres, mientras que
    • el primero no es A , o
    • el primero es A pero el segundo no es B , o
    • el primero es A , el segundo B pero el tercero no es C
  3. más de tres personajes arbitrarios
    Intereting Posts