Знак внутри класса символов [^] - это оператор отрицания, общий для большинства реализаций регулярных выражений (Perl, .NET, Ruby, Javascript и т. Д.). Так что я бы сделал это так:
[^\W\s\d]
- ^ - соответствует чему-либо НЕ в классе символов
- \ W - соответствует несловесным символам (символ слова будет определяться как a-z, A-Z, 0-9 и подчеркивание).
- \ s - соответствует пробелу (пробел, табуляция, возврат каретки, перевод строки)
- \ d - соответствует 0-9
Или вы можете выбрать другой подход, просто включив только то, что вы хотите:
[A-Za-z]
Основное отличие здесь состоит в том, что первое будет содержать подчеркивание. Это, и это демонстрирует способ написания выражения в тех же терминах, которые вы думаете. Но если вы измените направление, вы думаете включить символы вместо того, чтобы исключать их, тогда это может привести к тому, что регулярное выражение станет легче для чтения.
Мне не совсем понятно, какие специальные символы вам не нужны. Но я выписал оба решения на тот случай, если одно из них лучше для вас, чем другое.