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