2010-02-17 7 views
5

Je suppose que je deviens vraiment faible en logique.L'expression régulière ne correspond pas à "www"

Je dois écrire une expression régulière qui correspond à tout sauf www. Il devrait correspondre wwwd, abcd et tout le reste, juste paswww. (Oh mon Dieu, s'il te plaît, ça ne devrait pas être très facile). J'utilise l'implémentation de Ruby dans l'expression rationnelle. MISE À JOUR: J'ai besoin d'utiliser l'expression régulière et pas seulement text != 'www' parce que c'est la façon dont l'API est conçue. Il attend un motif comme argument et non le résultat.

Répondre

10

Pourquoi regex? N'est-ce pas text != "www" assez?

Ici, il est néanmoins (utilise look-ahead): ^(?!www$).*

+0

Ce match de chaîne vide sur chaîne non "www", et non le mot entier. –

+0

@Dejw: Thx, fixe – soulmerge

4

C'est une expression régulière de vanille. Il y a des choses plus fantaisistes que vous pouvez faire avec des assertions négatives dans certains dialectes.

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

En anglais:

Vous voulez quelque chose qui est exactement un caractère, exactement deux personnages, exactement trois caractères dont au moins un de ces 3 n'est pas un w, ou plus de 3 caractères.

+0

+ 1 belle approche. Juste une période superflue dans le dernier groupe. – soulmerge

+1

@Gumbo: Pourquoi? '. [^ w] .' correspond' wow'. – soulmerge

+0

@soulmerge: la dernière période n'est pas superflue (en supposant que vous dites qu'il ne devrait pas y avoir cinq périodes). Il s'agit de quatre périodes (....) plus zéro ou plusieurs caractères supplémentaires (. *) Pour un total de cinq périodes. Il pourrait également être spécifié comme ".... +". –

1

Même idée générale que Laurence Gonsalves (*), mais il me semble que l'on pourrait dire ^.$|^..$|^....+$|.*[^w].* C'est, 1 ou 2 ou plus de 3 caractères entre le début et la fin, ou n'importe quel nombre contenant un non-w. (*) Je voulais vraiment que ce soit un commentaire sur sa réponse, mais je l'ai posté accidentellement comme ma propre réponse. Je suppose que je vais juste laisser ici.

+0

Ooh, belle simplification. +1 –

0

Juste une autre approche

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