2010-10-04 5 views
2

J'essaie d'écrire une expression régulière qui devrait être capable d'identifier les expressions booléennes.Regex C# ne devrait pas correspondre à des opérateurs booléens

Je dois éviter des cas comme IF(AND AND AND). Autrement dit, le nom de la variable ne doit pas être l'un des opérateurs suivants (OR;AND;XOR).

J'ai également essayé d'utiliser [^(OR)] mais cela n'a pas été utile. Mon Regex ressemble à ceci:

(?:<Name> [A-Za-z0-9]) 

Est-il possible d'écrire un Regex qui pourrait trouver une chaîne comme OR et ne correspondent pas?

Mise à jour:

@Kobi - J'ai essayé votre solution et il fonctionne très bien. Y at-il d'autres façons de faire des choses comme celle-ci pour les nuls. Je veux écrire un code lisible

+0

Pouvez-vous fournir une entrée d'échantillon et une sortie attendue? – Shekhar

Répondre

2

Essayez un négatif préanalyse:

(?<Name>\b(?!(?:and|x?or)\b)[A-Za-z0-9]+) 

Cela suppose que vous essayez de faire correspondre un seul littéral, comme « IF (ce ET ce) ». L'expression régulière vérifie avant de prendre des lettres, si tout ce qu'elle voit est "et" "ou" ou "xor", elle échoue.

Aussi, assurez-vous que vous avez le droit RegexOptions set - vous voulez probablement IgnoreCase sur, et à moins que vous avez IgnorePatternWhitespace l'espace dans votre modèle original pourrait échouer un match, il n'y a pas d'espace dans if(var1, par exemple.

+0

J'ai essayé de le garder aussi simple que possible – Orri

+0

@ user359446 - Je ne suis pas sûr de ce que cela signifie ': |' – Kobi

+0

Je vais essayer votre solution thx L'expression régulière ne devrait pas correspondre s'il y a l'une des expressions booléennes – Orri

Questions connexes