Назначение [^ \ x20- \ x7E] в регулярных выражениях - PullRequest
39 голосов
/ 11 июня 2009
 [^\x20-\x7E]

Я видел этот шаблон, используемый для регулярного выражения, целью которого было удалить не-ascii символы из строки. Что это значит?

Ответы [ 4 ]

45 голосов
/ 12 июня 2009

Это говорит что-то вроде: все символы, которые не (^) в диапазоне \x20-\x7E (шестнадцатеричные 0x20 до 0x7E).

Согласно http://www.asciitable.com/, это символы от пробела до ~.

7 голосов
/ 12 июня 2009

Это означает соответствие любым символам, которые не являются печатными символами.

Печатные символы включают от a до z, от A до Z, от 0 до 9 и такие символы, как ",; $ #% и т. Д.

^ not
\x20 hex code for space character
- to 
\x7e hex code for ~ (tilde) character

Все печатные символы ascii находятся между этими двумя.

Этот оператор соответствует не ascii-символам, а также контрольным (не печатаемым) ascii-символам, таким как bell, tab, null и другие.

Посмотрите на

man ascii

в системе Unix, чтобы увидеть, каким символам он соответствует.

В Perl вы также можете написать это как

[^ -~]

или

[[:^cntrl:]]

Этот последний немного отличается тем, что он соответствует любому неконтролирующему символу, включая расширенный ascii (например, символы с акцентом) и юникод.

Возможно, вы не захотите ограничивать себя только ascii, поскольку за пределами США часто используются допустимые печатные символы за пределами этого небольшого диапазона, например øüéåç ...

3 голосов
/ 12 июня 2009

Это означает «все, что не является символьным кодом в шестнадцатеричном диапазоне от 0x20 до 0x7E, т.е. от 32 до 126».

2 голосов
/ 12 июня 2009

Символ каретки (^) внутри скобок [] означает «не», а \ x20- \ x7E обозначает диапазон символов ascii, где \ x20 (пробел) - начало диапазона, а \ x7E (~ ) это конец. Это в основном все, что не является буквой, цифрой или обычной пунктуацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...