2010-02-17 15 views
5

Creo que me estoy volviendo realmente débil en la lógica.Expresión regular para que no coincida con "www"

Necesito escribir una expresión regular que coincida con todo excepto www. Debe coincidir con wwwd, abcd y todo lo demás, solo nowww. (Oh Dios, por favor, no debería ser muy fácil).

Estoy usando la implementación del lenguaje Ruby de la expresión regular.

ACTUALIZACIÓN: Necesito usar expresiones regulares y no solo text != 'www' porque es la manera en que se diseña API. Se espera un patrón como argumento y no resultado.

Respuesta

10

¿Por qué regex? ¿No es suficiente text != "www"?

Aquí no es menos (utiliza look-ahead): ^(?!www$).*

+0

Este partido cadena vacía en la no "www" cadena, no toda la palabra. –

+0

@Dejw: Thx, fijo – soulmerge

4

Esta es una expresión regular con sabor de vainilla. Hay cosas más elegantes que puedes hacer con aserciones negativas en ciertos dialectos.

^(.|..|[^w]..|.[^w].|..[^w]|.....*)$ 

En Inglés:

usted quiere algo que es exactamente un carácter, exactamente dos caracteres, exactamente tres caracteres, donde al menos uno de los 3 no es un w, o más de 3 caracteres.

+0

+1 buen enfoque. Solo un período superfluo en el último grupo. – soulmerge

+1

@Gumbo: ¿Por qué? '. [^ w] .' coincide con' wow'. – soulmerge

+0

@soulmerge: el último período no es superfluo (suponiendo que esté diciendo que no deberían ser cinco períodos). Son cuatro períodos (....) más cero o más caracteres adicionales (. *) Para un total de cinco períodos. También se podría especificar como ".... +". –

1

La misma idea general como Laurence Gonsalves (*), pero me parece que podría decirse ^.$|^..$|^....+$|.*[^w].* Es decir, 1 o 2 o más de 3 caracteres entre el inicio y el final, o cualquier número que contenga un non-w.

(*) Realmente quise que esto fuera un comentario sobre su respuesta, pero accidentalmente lo publiqué como mi propia respuesta. Supongo que lo dejaré aquí.

+0

Ooh, buena simplificación. +1 –

0

Sólo otro enfoque

^.{0,2}([^w].*|.{4,})?$ 
Cuestiones relacionadas