Regex c # не должен совпадать с логическими операторами - PullRequest
2 голосов
/ 04 октября 2010

Я пытаюсь написать регулярное выражение, которое должно быть в состоянии идентифицировать логические выражения.

Мне нужно избегать таких случаев, как IF(AND AND AND). То есть имя переменной не должно быть одним из следующих операторов (OR;AND;XOR).

Я также пытался использовать [^(OR)], но это не помогло. Мой Regex выглядит так:

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

Есть ли шанс написать регулярное выражение, которое могло бы найти строку типа OR, а затем не соответствовать ей?

Обновление:

@ Коби - Я попробовал ваше решение, и оно отлично работает. Есть ли другие способы сделать что-нибудь подобное для чайников. Я хочу написать читабельный код

1 Ответ

2 голосов
/ 04 октября 2010

Попробуйте заглянуть в будущее:

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

Предполагается, что вы пытаетесь сопоставить один литерал, например "IF ( this AND this )". Регулярное выражение проверяет перед приемом букв, если все, что он видит, это «и», «или» или «xor», то это не удается.

Также убедитесь, что у вас установлен правильный RegexOptions - вы, вероятно, хотите включить IgnoreCase, и если у вас нет IgnorePatternWhitespace, пробел в исходном шаблоне может не соответствовать, в if(var1 нет пробела. Например.

...