2010-05-13 4 views
1

Vous recherchez une aide avec une expression régulière pour effectuer les opérations suivantes:Expression régulière pour correspondre à des séquences d'une ou plusieurs lettres, sauf pour une valeur spécifique

  • Doit être Alpha Char
  • doit être d'au moins 1 Char
  • NE DOIT PAS être une valeur spécifique, par exemple ! = "Default"

Merci pour toute aide, Dave

+1

comme les devoirs Smells. –

+0

@JS Bangs: Pourquoi pensez-vous que ce soit les devoirs? –

+2

Quelle langue/variante regex utilisez-vous? –

Répondre

2

Utilisez un préanalyse négatif:

^(?!Default)[a-zA-Z]+$ 
+0

Certainement pas devoirs - Peut-être que mes enfants auront ce devoirs un jour! Merci pour l'aide Mark. Dave – Dave

+0

cette solution est OK si vous avez une seule valeur spécifique, mais si vous comparez à une liste de valeurs spécifiques (par exemple: mots du dictionnaire) la solution devient intenable. –

0

Résoudre ce en deux étapes:

  1. comparer à la régulière expression [a-zA-Z]+ qui signifie «une ou plusieurs des lettres de az ou AZ
  2. Si ce test réussit, recherchez-le dans une liste de valeurs spécifiques que vous protégez.

Il ne sert à rien d'essayer de placer ces deux tests dans une seule expression régulière complexe que vous ne comprenez pas. Une bonne règle avec les expressions régulières est que si vous devez demander à quelqu'un comment le faire, vous devriez vous efforcer d'utiliser la solution la moins complexe possible. Si vous ne comprenez pas l'expression régulière, vous ne pourrez pas conserver le code au fil du temps.

En pseudocode:

if regexp_matches('[a-zA-Z]+', string) && string not in ['Default', 'Foobar', ...] { 
    print "it's a keeper!" 
} 
Questions connexes