Подтвердить что ты не робот

Назначение [^\x20-\x7E] в регулярных выражениях

 [^\x20-\x7E]

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

Этот оператор соответствует символам не ascii, а также символам управления ascii (непечатающим), таким как звонок, вкладка, нуль и другие.

Посмотрите

man ascii

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

В perl вы также можете записать это как

[^ -~]

или

[[:^cntrl:]]

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

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

Ответ 3

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

Ответ 4

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