Ответ 1
Вы абсолютно правы, x
достаточно. !
просто соответствует литералу !
, внутри класса символов или вне. Единственное место, где он имеет какое-либо особое значение, - это часть негативного взгляда или негативного внешнего вида.
В Всестороннее регулярное выражение для проверки номера телефона, принятый ответ содержит несколько комментариев. Один из комментариев от @jcmcbeth предлагает следующее простое регулярное выражение для использования для получения цифр номера телефона, представленного пользователем:
string.replace("[^\d+!x]", "")
Сразу же после комментария с этим предлагаемым регулярным выражением, другой вопрос спрашивает why the !x part?
, который затем отвечает в следующем комментарии: The !x is there to keep any "x" character from getting stripped
.
Это имеет смысл для меня, кроме восклицательного знака !
. Глядя на документацию для классов символов в регулярных выражениях, я не вижу, что восклицательный знак является особым символом, и мне не кажется, что для x
требуется предшествующий ему специальный символ. Кроме того, из обсуждения связанного вопроса я не вижу никаких комментариев, указывающих, что восклицательный знак может быть частью телефонного номера (что объясняет его включение в отрицательный класс символов).
Может кто-нибудь объяснить мне, почему присутствует восклицательный знак? Спасибо.
Вы абсолютно правы, x
достаточно. !
просто соответствует литералу !
, внутри класса символов или вне. Единственное место, где он имеет какое-либо особое значение, - это часть негативного взгляда или негативного внешнего вида.
Конечно [^\d+!x]
означает "NOT '\'
, NOT 'd'
, NOT '+'
, NOT '!'
и NOT 'x'
".
[ ]
- группа символов.
[^ ]
отменяет список символов.