Оба других ответа близки, но, вероятно, не по разным причинам.
public\s+class\s+(?:(?!first|second).)+
Обратите внимание, что вокруг отрицательного взгляда есть группа (без захвата), чтобы гарантировать, что она применима не только к первой позиции.
И эта группа менее ограничительна - поскольку .
исключает символ новой строки, она использует ее вместо \S
, а $
не требуется - это исключит указанные слова и совпадет с другими.
Никаких косых черт, обертывающих выражение, поскольку они не нужны во всем, и они могут запутать людей, которые сталкивались только с использованием регулярных выражений на основе строк.
Если это по-прежнему не удается, опубликуйте точное содержимое, которое было ошибочно сопоставлено или пропущено, и какой язык / ide вы используете.
Обновление:
Оказывается, вы используете Visual Studio, которая имеет собственную специальную реализацию регулярных выражений , по непонятной причине. Итак, вы захотите попробовать это вместо:
public:b+class:b+~(first|second)+$
У меня нет способа проверить это - если это не сработает, попробуйте сбросить $
, но в противном случае вам придется найти пользователя VS. Или, что еще лучше, инженеры VS, ответственные за это глупое нестандартное регулярное выражение.