Почему восклицательный знак в другой публикации StackOverflow с номером телефона REGEX?

В Всестороннее регулярное выражение для проверки номера телефона, принятый ответ содержит несколько комментариев. Один из комментариев от @jcmcbeth предлагает следующее простое регулярное выражение для использования для получения цифр номера телефона, представленного пользователем:

string.replace("[^\d+!x]", "")

Сразу же после комментария с этим предлагаемым регулярным выражением, другой вопрос спрашивает why the !x part?, который затем отвечает в следующем комментарии: The !x is there to keep any "x" character from getting stripped.

Это имеет смысл для меня, кроме восклицательного знака !. Глядя на документацию для классов символов в регулярных выражениях, я не вижу, что восклицательный знак является особым символом, и мне не кажется, что для x требуется предшествующий ему специальный символ. Кроме того, из обсуждения связанного вопроса я не вижу никаких комментариев, указывающих, что восклицательный знак может быть частью телефонного номера (что объясняет его включение в отрицательный класс символов).

Может кто-нибудь объяснить мне, почему присутствует восклицательный знак? Спасибо.

Ответ 1

Вы абсолютно правы, x достаточно. ! просто соответствует литералу !, внутри класса символов или вне. Единственное место, где он имеет какое-либо особое значение, - это часть негативного взгляда или негативного внешнего вида.

Ответ 2

Конечно [^\d+!x] означает "NOT '\', NOT 'd', NOT '+', NOT '!' и NOT 'x'".

[ ] - группа символов.

[^ ] отменяет список символов.