Решение Cameron является одновременно точным и эффективным (и должно использоваться для любого производственного кода, где скорость должна быть оптимизирована).Ответ, представленный здесь, менее эффективен, но демонстрирует общий подход к применению логики с использованием регулярных выражений.
Вы можете использовать несколько положительных и отрицательных утверждений регулярного выражения (все применяются в одном месте в целевой строке - обычно это начало), чтобы применить несколько логических ограничений для соответствия.Приведенное ниже регулярное выражение демонстрирует, как легко это сделать для данного примера.Вам нужно понять, как движок регулярных выражений в действительности соответствует (и не совпадает), чтобы найти правильные выражения, но это не сложно, как только вы освоите его.
foundMatch = Regex.IsMatch(subjectString, @"
# Match 'word' meeting multiple logical constraints.
^ # Anchor to start of string.
(?=[^!@#]*$) # It cannot have any of: ! @ #, AND
(?![ =]) # It cannot begin with a space or =, AND
(?!.*\S$) # It cannot end with a space, AND
.{1,} # length >= 1 (ok to match special 'word')
\z # Anchor to end of string.
",
RegexOptions.IgnorePatternWhitespace);
Это приложение«regex-logic» часто используется для комплексной проверки пароля.